[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, upstream, updated. 0.25.5-639-g8f94f35

test branch puppet-dev at googlegroups.com
Wed Jul 14 10:35:03 UTC 2010


The following commit has been merged in the upstream branch:
commit 9592dd896c6aab9a3e9b0181c943e7c9ba3d2d6d
Author: Brice Figureau <brice-puppet at daysofwonder.com>
Date:   Sun Jun 6 17:22:03 2010 +0200

    Fix #3871 - Add the 'in' operator
    
    This operator allows to find if the left operand is in the right one.
    The left operand must be resort to a string, but the right operand can be:
    * a string
    * an array
    * a hash (the search is done on the keys)
    
    This syntax can be used in any place where an expression is supported.
    
    Syntax:
    $eatme = 'eat'
    if $eatme in ['ate', 'eat'] {
    ...
    }
    
    $value = 'beat generation'
    if 'eat' in $value {
      notice("on the road")
    }
    
    Signed-off-by: Brice Figureau <brice-puppet at daysofwonder.com>

diff --git a/lib/puppet/parser/ast.rb b/lib/puppet/parser/ast.rb
index 06adb8b..5a8f7be 100644
--- a/lib/puppet/parser/ast.rb
+++ b/lib/puppet/parser/ast.rb
@@ -103,6 +103,7 @@ require 'puppet/parser/ast/comparison_operator'
 require 'puppet/parser/ast/else'
 require 'puppet/parser/ast/function'
 require 'puppet/parser/ast/ifstatement'
+require 'puppet/parser/ast/in_operator'
 require 'puppet/parser/ast/leaf'
 require 'puppet/parser/ast/match_operator'
 require 'puppet/parser/ast/minus'
diff --git a/lib/puppet/parser/ast/in_operator.rb b/lib/puppet/parser/ast/in_operator.rb
new file mode 100644
index 0000000..0f543af
--- /dev/null
+++ b/lib/puppet/parser/ast/in_operator.rb
@@ -0,0 +1,26 @@
+require 'puppet'
+require 'puppet/parser/ast/branch'
+
+class Puppet::Parser::AST
+    class InOperator < AST::Branch
+
+        attr_accessor :lval, :rval
+
+        # Returns a boolean which is the result of the 'in' operation
+        # of lval and rval operands
+        def evaluate(scope)
+
+            # evaluate the operands, should return a boolean value
+            lval = @lval.safeevaluate(scope)
+            unless lval.is_a?(::String)
+                raise ArgumentError, "'#{lval}' from left operand of 'in' expression is not a string"
+            end
+
+            rval = @rval.safeevaluate(scope)
+            unless rval.respond_to?(:include?)
+                raise ArgumentError, "'#{rval}' from right operand of 'in' expression is not of a supported type (string, array or hash)"
+            end
+            return rval.include?(lval)
+        end
+    end
+end
diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra
index af96d5e..545137e 100644
--- a/lib/puppet/parser/grammar.ra
+++ b/lib/puppet/parser/grammar.ra
@@ -12,11 +12,12 @@ token IF ELSE IMPORT DEFINE ELSIF VARIABLE CLASS INHERITS NODE BOOLEAN
 token NAME SEMIC CASE DEFAULT AT LCOLLECT RCOLLECT CLASSNAME CLASSREF
 token NOT OR AND UNDEF PARROW PLUS MINUS TIMES DIV LSHIFT RSHIFT UMINUS
 token MATCH NOMATCH REGEX IN_EDGE OUT_EDGE IN_EDGE_SUB OUT_EDGE_SUB
+token IN
 
 prechigh
     right NOT
     nonassoc UMINUS
-    left  MATCH NOMATCH
+    left  IN MATCH NOMATCH
     left  TIMES DIV
     left  MINUS PLUS
     left  LSHIFT RSHIFT
@@ -512,6 +513,9 @@ else:             # nothing
 # per operator :-(
 
 expression:   rvalue
+            | expression IN rvalue {
+    result = ast AST::InOperator, :lval => val[0], :rval => val[2]
+}
             | expression MATCH regex {
     result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
 }
diff --git a/lib/puppet/parser/lexer.rb b/lib/puppet/parser/lexer.rb
index cc0b0bc..092323e 100644
--- a/lib/puppet/parser/lexer.rb
+++ b/lib/puppet/parser/lexer.rb
@@ -266,7 +266,8 @@ class Puppet::Parser::Lexer
         "or"   => :OR,
         "undef"   => :UNDEF,
         "false" => :FALSE,
-        "true" => :TRUE
+        "true" => :TRUE,
+        "in" => :IN
     )
 
     def clear
diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb
index 248747d..7e78126 100644
--- a/lib/puppet/parser/parser.rb
+++ b/lib/puppet/parser/parser.rb
@@ -25,7 +25,7 @@ module Puppet
 
     class Parser < Racc::Parser
 
-module_eval <<'..end grammar.ra modeval..id6c1a5e4924', 'grammar.ra', 864
+module_eval <<'..end grammar.ra modeval..id02e244f149', 'grammar.ra', 868
 
 # It got too annoying having code in a file that needs to be compiled.
 require 'puppet/parser/parser_support'
@@ -37,847 +37,858 @@ require 'puppet/parser/parser_support'
 
 # $Id$
 
-..end grammar.ra modeval..id6c1a5e4924
+..end grammar.ra modeval..id02e244f149
 
 ##### racc 1.4.5 generates ###
 
 racc_reduce_table = [
  0, 0, :racc_error,
- 1, 69, :_reduce_1,
- 1, 69, :_reduce_none,
+ 1, 70, :_reduce_1,
  1, 70, :_reduce_none,
- 2, 70, :_reduce_4,
- 1, 72, :_reduce_none,
- 1, 72, :_reduce_none,
- 1, 72, :_reduce_none,
- 1, 72, :_reduce_none,
- 1, 72, :_reduce_none,
- 1, 72, :_reduce_none,
- 1, 72, :_reduce_none,
- 1, 72, :_reduce_none,
- 1, 72, :_reduce_none,
- 1, 72, :_reduce_none,
- 1, 72, :_reduce_none,
- 1, 72, :_reduce_none,
- 1, 72, :_reduce_none,
- 1, 72, :_reduce_none,
- 3, 86, :_reduce_19,
- 3, 86, :_reduce_20,
- 1, 87, :_reduce_none,
- 1, 87, :_reduce_none,
- 1, 87, :_reduce_none,
+ 1, 71, :_reduce_none,
+ 2, 71, :_reduce_4,
+ 1, 73, :_reduce_none,
+ 1, 73, :_reduce_none,
+ 1, 73, :_reduce_none,
+ 1, 73, :_reduce_none,
+ 1, 73, :_reduce_none,
+ 1, 73, :_reduce_none,
+ 1, 73, :_reduce_none,
+ 1, 73, :_reduce_none,
+ 1, 73, :_reduce_none,
+ 1, 73, :_reduce_none,
+ 1, 73, :_reduce_none,
+ 1, 73, :_reduce_none,
+ 1, 73, :_reduce_none,
+ 1, 73, :_reduce_none,
+ 3, 87, :_reduce_19,
+ 3, 87, :_reduce_20,
  1, 88, :_reduce_none,
  1, 88, :_reduce_none,
  1, 88, :_reduce_none,
- 1, 88, :_reduce_none,
- 4, 80, :_reduce_28,
- 5, 80, :_reduce_29,
- 3, 80, :_reduce_30,
- 2, 80, :_reduce_31,
- 1, 90, :_reduce_none,
- 1, 90, :_reduce_none,
- 3, 90, :_reduce_34,
- 3, 90, :_reduce_35,
- 1, 91, :_reduce_none,
- 1, 91, :_reduce_none,
- 1, 91, :_reduce_none,
- 1, 91, :_reduce_none,
- 1, 91, :_reduce_none,
+ 1, 89, :_reduce_none,
+ 1, 89, :_reduce_none,
+ 1, 89, :_reduce_none,
+ 1, 89, :_reduce_none,
+ 4, 81, :_reduce_28,
+ 5, 81, :_reduce_29,
+ 3, 81, :_reduce_30,
+ 2, 81, :_reduce_31,
  1, 91, :_reduce_none,
  1, 91, :_reduce_none,
- 1, 91, :_reduce_none,
- 1, 91, :_reduce_44,
- 5, 73, :_reduce_45,
- 5, 73, :_reduce_46,
- 5, 73, :_reduce_47,
- 5, 84, :_reduce_48,
- 2, 74, :_reduce_49,
- 1, 107, :_reduce_50,
- 2, 107, :_reduce_51,
- 6, 75, :_reduce_52,
- 2, 75, :_reduce_53,
- 3, 108, :_reduce_54,
- 3, 108, :_reduce_55,
- 1, 109, :_reduce_none,
- 1, 109, :_reduce_none,
- 3, 109, :_reduce_58,
+ 3, 91, :_reduce_34,
+ 3, 91, :_reduce_35,
+ 1, 92, :_reduce_none,
+ 1, 92, :_reduce_none,
+ 1, 92, :_reduce_none,
+ 1, 92, :_reduce_none,
+ 1, 92, :_reduce_none,
+ 1, 92, :_reduce_none,
+ 1, 92, :_reduce_none,
+ 1, 92, :_reduce_none,
+ 1, 92, :_reduce_44,
+ 5, 74, :_reduce_45,
+ 5, 74, :_reduce_46,
+ 5, 74, :_reduce_47,
+ 5, 85, :_reduce_48,
+ 2, 75, :_reduce_49,
+ 1, 108, :_reduce_50,
+ 2, 108, :_reduce_51,
+ 6, 76, :_reduce_52,
+ 2, 76, :_reduce_53,
+ 3, 109, :_reduce_54,
+ 3, 109, :_reduce_55,
  1, 110, :_reduce_none,
- 3, 110, :_reduce_60,
- 1, 111, :_reduce_61,
- 1, 111, :_reduce_62,
- 3, 112, :_reduce_63,
- 3, 112, :_reduce_64,
- 1, 113, :_reduce_none,
- 1, 113, :_reduce_none,
- 4, 115, :_reduce_67,
- 1, 101, :_reduce_none,
- 3, 101, :_reduce_69,
- 0, 102, :_reduce_none,
- 1, 102, :_reduce_none,
- 1, 117, :_reduce_72,
- 1, 92, :_reduce_73,
- 1, 94, :_reduce_74,
- 1, 116, :_reduce_none,
- 1, 116, :_reduce_none,
- 1, 116, :_reduce_none,
- 1, 116, :_reduce_none,
- 1, 116, :_reduce_none,
- 1, 116, :_reduce_none,
- 1, 116, :_reduce_none,
- 3, 76, :_reduce_82,
- 3, 76, :_reduce_83,
- 3, 85, :_reduce_84,
- 0, 103, :_reduce_85,
- 1, 103, :_reduce_86,
- 3, 103, :_reduce_87,
- 3, 121, :_reduce_88,
- 3, 123, :_reduce_89,
- 1, 124, :_reduce_none,
- 1, 124, :_reduce_none,
- 0, 106, :_reduce_92,
- 1, 106, :_reduce_93,
- 3, 106, :_reduce_94,
- 1, 125, :_reduce_none,
- 3, 125, :_reduce_96,
- 1, 114, :_reduce_none,
- 1, 114, :_reduce_none,
- 1, 114, :_reduce_none,
- 1, 114, :_reduce_none,
+ 1, 110, :_reduce_none,
+ 3, 110, :_reduce_58,
+ 1, 111, :_reduce_none,
+ 3, 111, :_reduce_60,
+ 1, 112, :_reduce_61,
+ 1, 112, :_reduce_62,
+ 3, 113, :_reduce_63,
+ 3, 113, :_reduce_64,
  1, 114, :_reduce_none,
  1, 114, :_reduce_none,
- 1, 122, :_reduce_none,
- 1, 122, :_reduce_none,
- 1, 122, :_reduce_none,
- 1, 122, :_reduce_none,
- 1, 122, :_reduce_none,
- 1, 122, :_reduce_none,
- 1, 122, :_reduce_none,
- 1, 122, :_reduce_none,
- 1, 122, :_reduce_none,
- 1, 122, :_reduce_none,
- 1, 122, :_reduce_none,
- 1, 122, :_reduce_none,
- 4, 96, :_reduce_115,
- 3, 96, :_reduce_116,
- 1, 98, :_reduce_117,
- 2, 98, :_reduce_118,
- 2, 128, :_reduce_119,
- 1, 129, :_reduce_120,
- 2, 129, :_reduce_121,
- 1, 95, :_reduce_122,
- 4, 89, :_reduce_123,
- 4, 89, :_reduce_124,
- 6, 78, :_reduce_125,
- 5, 78, :_reduce_126,
- 0, 130, :_reduce_none,
- 4, 130, :_reduce_128,
- 3, 130, :_reduce_129,
- 1, 119, :_reduce_none,
- 3, 119, :_reduce_131,
- 3, 119, :_reduce_132,
- 3, 119, :_reduce_133,
- 3, 119, :_reduce_134,
- 3, 119, :_reduce_135,
- 3, 119, :_reduce_136,
- 3, 119, :_reduce_137,
- 3, 119, :_reduce_138,
- 2, 119, :_reduce_139,
- 3, 119, :_reduce_140,
- 3, 119, :_reduce_141,
- 3, 119, :_reduce_142,
- 3, 119, :_reduce_143,
- 3, 119, :_reduce_144,
- 3, 119, :_reduce_145,
- 2, 119, :_reduce_146,
- 3, 119, :_reduce_147,
- 3, 119, :_reduce_148,
- 3, 119, :_reduce_149,
- 5, 77, :_reduce_150,
- 1, 132, :_reduce_none,
- 2, 132, :_reduce_152,
- 5, 133, :_reduce_153,
- 4, 133, :_reduce_154,
- 1, 134, :_reduce_none,
- 3, 134, :_reduce_156,
- 3, 97, :_reduce_157,
- 1, 136, :_reduce_none,
- 4, 136, :_reduce_159,
- 1, 138, :_reduce_none,
- 3, 138, :_reduce_161,
- 3, 137, :_reduce_162,
- 1, 135, :_reduce_none,
- 1, 135, :_reduce_none,
- 1, 135, :_reduce_none,
- 1, 135, :_reduce_none,
- 1, 135, :_reduce_none,
- 1, 135, :_reduce_none,
- 1, 135, :_reduce_none,
- 1, 135, :_reduce_170,
+ 4, 116, :_reduce_67,
+ 1, 102, :_reduce_none,
+ 3, 102, :_reduce_69,
+ 0, 103, :_reduce_none,
+ 1, 103, :_reduce_none,
+ 1, 118, :_reduce_72,
+ 1, 93, :_reduce_73,
+ 1, 95, :_reduce_74,
+ 1, 117, :_reduce_none,
+ 1, 117, :_reduce_none,
+ 1, 117, :_reduce_none,
+ 1, 117, :_reduce_none,
+ 1, 117, :_reduce_none,
+ 1, 117, :_reduce_none,
+ 1, 117, :_reduce_none,
+ 3, 77, :_reduce_82,
+ 3, 77, :_reduce_83,
+ 3, 86, :_reduce_84,
+ 0, 104, :_reduce_85,
+ 1, 104, :_reduce_86,
+ 3, 104, :_reduce_87,
+ 3, 122, :_reduce_88,
+ 3, 124, :_reduce_89,
+ 1, 125, :_reduce_none,
+ 1, 125, :_reduce_none,
+ 0, 107, :_reduce_92,
+ 1, 107, :_reduce_93,
+ 3, 107, :_reduce_94,
+ 1, 126, :_reduce_none,
+ 3, 126, :_reduce_96,
+ 1, 115, :_reduce_none,
+ 1, 115, :_reduce_none,
+ 1, 115, :_reduce_none,
+ 1, 115, :_reduce_none,
+ 1, 115, :_reduce_none,
+ 1, 115, :_reduce_none,
+ 1, 123, :_reduce_none,
+ 1, 123, :_reduce_none,
+ 1, 123, :_reduce_none,
+ 1, 123, :_reduce_none,
+ 1, 123, :_reduce_none,
+ 1, 123, :_reduce_none,
+ 1, 123, :_reduce_none,
+ 1, 123, :_reduce_none,
+ 1, 123, :_reduce_none,
+ 1, 123, :_reduce_none,
+ 1, 123, :_reduce_none,
+ 1, 123, :_reduce_none,
+ 4, 97, :_reduce_115,
+ 3, 97, :_reduce_116,
+ 1, 99, :_reduce_117,
+ 2, 99, :_reduce_118,
+ 2, 129, :_reduce_119,
+ 1, 130, :_reduce_120,
+ 2, 130, :_reduce_121,
+ 1, 96, :_reduce_122,
+ 4, 90, :_reduce_123,
+ 4, 90, :_reduce_124,
+ 6, 79, :_reduce_125,
+ 5, 79, :_reduce_126,
+ 0, 131, :_reduce_none,
+ 4, 131, :_reduce_128,
+ 3, 131, :_reduce_129,
+ 1, 120, :_reduce_none,
+ 3, 120, :_reduce_131,
+ 3, 120, :_reduce_132,
+ 3, 120, :_reduce_133,
+ 3, 120, :_reduce_134,
+ 3, 120, :_reduce_135,
+ 3, 120, :_reduce_136,
+ 3, 120, :_reduce_137,
+ 3, 120, :_reduce_138,
+ 3, 120, :_reduce_139,
+ 2, 120, :_reduce_140,
+ 3, 120, :_reduce_141,
+ 3, 120, :_reduce_142,
+ 3, 120, :_reduce_143,
+ 3, 120, :_reduce_144,
+ 3, 120, :_reduce_145,
+ 3, 120, :_reduce_146,
+ 2, 120, :_reduce_147,
+ 3, 120, :_reduce_148,
+ 3, 120, :_reduce_149,
+ 3, 120, :_reduce_150,
+ 5, 78, :_reduce_151,
+ 1, 133, :_reduce_none,
+ 2, 133, :_reduce_153,
+ 5, 134, :_reduce_154,
+ 4, 134, :_reduce_155,
  1, 135, :_reduce_none,
- 1, 139, :_reduce_172,
- 1, 140, :_reduce_none,
- 3, 140, :_reduce_174,
- 2, 79, :_reduce_175,
- 6, 81, :_reduce_176,
- 5, 81, :_reduce_177,
- 7, 82, :_reduce_178,
- 6, 82, :_reduce_179,
- 6, 83, :_reduce_180,
- 5, 83, :_reduce_181,
- 1, 105, :_reduce_182,
- 1, 100, :_reduce_183,
- 1, 100, :_reduce_184,
- 1, 100, :_reduce_185,
- 1, 143, :_reduce_none,
- 3, 143, :_reduce_187,
- 1, 145, :_reduce_188,
- 1, 146, :_reduce_189,
- 1, 146, :_reduce_190,
- 1, 146, :_reduce_191,
- 1, 146, :_reduce_none,
- 0, 71, :_reduce_193,
- 0, 147, :_reduce_194,
+ 3, 135, :_reduce_157,
+ 3, 98, :_reduce_158,
+ 1, 137, :_reduce_none,
+ 4, 137, :_reduce_160,
+ 1, 139, :_reduce_none,
+ 3, 139, :_reduce_162,
+ 3, 138, :_reduce_163,
+ 1, 136, :_reduce_none,
+ 1, 136, :_reduce_none,
+ 1, 136, :_reduce_none,
+ 1, 136, :_reduce_none,
+ 1, 136, :_reduce_none,
+ 1, 136, :_reduce_none,
+ 1, 136, :_reduce_none,
+ 1, 136, :_reduce_171,
+ 1, 136, :_reduce_none,
+ 1, 140, :_reduce_173,
  1, 141, :_reduce_none,
- 3, 141, :_reduce_196,
- 3, 141, :_reduce_197,
- 1, 148, :_reduce_none,
- 3, 148, :_reduce_199,
- 3, 149, :_reduce_200,
- 1, 149, :_reduce_201,
- 3, 149, :_reduce_202,
- 1, 149, :_reduce_203,
+ 3, 141, :_reduce_175,
+ 2, 80, :_reduce_176,
+ 6, 82, :_reduce_177,
+ 5, 82, :_reduce_178,
+ 7, 83, :_reduce_179,
+ 6, 83, :_reduce_180,
+ 6, 84, :_reduce_181,
+ 5, 84, :_reduce_182,
+ 1, 106, :_reduce_183,
+ 1, 101, :_reduce_184,
+ 1, 101, :_reduce_185,
+ 1, 101, :_reduce_186,
  1, 144, :_reduce_none,
- 2, 144, :_reduce_205,
+ 3, 144, :_reduce_188,
+ 1, 146, :_reduce_189,
+ 1, 147, :_reduce_190,
+ 1, 147, :_reduce_191,
+ 1, 147, :_reduce_192,
+ 1, 147, :_reduce_none,
+ 0, 72, :_reduce_194,
+ 0, 148, :_reduce_195,
  1, 142, :_reduce_none,
- 2, 142, :_reduce_207,
- 1, 150, :_reduce_none,
- 1, 150, :_reduce_none,
- 1, 93, :_reduce_210,
- 3, 118, :_reduce_211,
- 4, 118, :_reduce_212,
- 2, 118, :_reduce_213,
- 1, 126, :_reduce_none,
- 1, 126, :_reduce_none,
- 0, 104, :_reduce_none,
- 1, 104, :_reduce_217,
- 1, 131, :_reduce_218,
- 3, 127, :_reduce_219,
- 4, 127, :_reduce_220,
- 2, 127, :_reduce_221,
+ 3, 142, :_reduce_197,
+ 3, 142, :_reduce_198,
+ 1, 149, :_reduce_none,
+ 3, 149, :_reduce_200,
+ 3, 150, :_reduce_201,
+ 1, 150, :_reduce_202,
+ 3, 150, :_reduce_203,
+ 1, 150, :_reduce_204,
+ 1, 145, :_reduce_none,
+ 2, 145, :_reduce_206,
+ 1, 143, :_reduce_none,
+ 2, 143, :_reduce_208,
+ 1, 151, :_reduce_none,
  1, 151, :_reduce_none,
- 3, 151, :_reduce_223,
+ 1, 94, :_reduce_211,
+ 3, 119, :_reduce_212,
+ 4, 119, :_reduce_213,
+ 2, 119, :_reduce_214,
+ 1, 127, :_reduce_none,
+ 1, 127, :_reduce_none,
+ 0, 105, :_reduce_none,
+ 1, 105, :_reduce_218,
+ 1, 132, :_reduce_219,
+ 3, 128, :_reduce_220,
+ 4, 128, :_reduce_221,
+ 2, 128, :_reduce_222,
+ 1, 152, :_reduce_none,
  3, 152, :_reduce_224,
- 1, 153, :_reduce_225,
- 1, 153, :_reduce_226,
- 4, 120, :_reduce_227,
- 1, 99, :_reduce_none,
- 4, 99, :_reduce_229 ]
+ 3, 153, :_reduce_225,
+ 1, 154, :_reduce_226,
+ 1, 154, :_reduce_227,
+ 4, 121, :_reduce_228,
+ 1, 100, :_reduce_none,
+ 4, 100, :_reduce_230 ]
 
-racc_reduce_n = 230
+racc_reduce_n = 231
 
-racc_shift_n = 379
+racc_shift_n = 381
 
 racc_action_table = [
-    64,    68,    49,    57,    96,    58,   101,    49,    75,   226,
-   322,   253,   155,   118,   149,    75,   155,    49,    60,    64,
-    68,   302,    92,   154,   254,   115,   176,   154,   161,    64,
-    68,   226,   161,    63,   303,   242,   243,    76,    79,   151,
-    52,    86,    56,    55,   176,    52,    71,    94,    55,  -167,
-    81,   227,    63,    88,   250,    52,    76,    79,    55,   300,
-    86,    53,   154,    53,    69,    71,    76,   261,    53,    81,
-    86,    64,    68,    64,    68,   127,   169,   262,    53,    81,
-    53,   155,   242,   243,   244,   363,    44,    64,    68,   340,
-    53,    96,   154,   101,    37,    42,    43,   161,    38,   301,
-    64,    68,   155,   177,   154,     9,   154,   186,    76,   261,
-    76,   261,    86,   154,    86,    64,    68,   127,   161,   127,
-    63,    81,   344,    81,    76,    79,   215,   304,    86,    64,
-    68,   219,    53,    71,    53,    64,    68,    81,   183,    96,
-    37,   101,   351,    37,    38,  -164,   275,   208,    53,   274,
-   352,     9,   269,   183,     9,    13,   239,    92,   215,   199,
-   203,   307,    63,   219,   238,    57,    76,    79,    63,   166,
-    86,   310,    76,    79,    69,    71,    86,    64,    68,    81,
-   166,    71,    94,    64,    68,    81,  -166,    75,    88,  -163,
-    53,    37,   142,    64,    68,    38,    53,    96,   315,   101,
-    37,    53,     9,    13,   208,    66,   199,   203,   319,   202,
-   154,     9,    13,  -182,    76,   261,    63,   193,    86,  -165,
-    76,    79,   172,   127,    86,   169,    63,    81,    69,    71,
-    76,    79,  -163,    81,    86,    44,    64,    68,    53,    71,
-    96,   333,   101,    81,    53,   205,   189,   190,   191,   192,
-   194,   228,   199,   203,    53,    64,    68,  -166,    92,    96,
-    37,   101,    64,    68,    38,   336,    96,   318,   101,    63,
-   176,     9,   167,    76,    79,   190,   191,    86,   166,    53,
-   199,   203,    71,    94,    92,   341,    81,   342,    63,    88,
-  -164,  -169,    76,    79,  -168,    63,    86,    53,  -167,    76,
-    79,    71,  -165,    86,    58,    81,    64,    68,    71,    94,
-    96,   206,    81,    64,    68,    88,    53,    96,   212,   101,
-    64,    68,   276,    53,    96,   148,   101,    64,    68,   205,
-   189,   190,   191,   120,   350,   142,   199,   203,   120,    63,
-   220,   222,  -168,    76,   134,   347,    63,    86,  -163,   115,
-    76,    79,   127,    63,    86,   223,    81,    76,    79,    71,
-   154,    86,   142,    81,    76,   261,    71,    53,    86,   226,
-    81,   241,   223,   127,    53,   242,   243,    81,    64,    68,
-  -166,    53,    96,   223,   101,   235,  -164,  -163,    53,    25,
-  -166,    32,     1,  -164,     7,    10,  -168,    16,  -165,    22,
-    92,    29,   361,     2,    64,    68,     9,    13,    96,    46,
-   101,    63,   190,   191,   231,    76,    79,   199,   203,    86,
-   113,   114,   110,   112,    71,    94,    92,   347,    81,   367,
-   230,    88,   369,   225,    64,    68,  -217,    63,    96,    53,
-   101,    76,    79,   267,    41,    86,   372,   244,   245,    40,
-    71,    94,    39,   228,    81,  -165,    92,    88,   273,   nil,
-    64,    68,   244,   272,    96,    53,   101,    63,   nil,   247,
-   nil,    76,    79,   244,   245,    86,   113,   114,   110,   112,
-    71,    94,    92,   nil,    81,   nil,   nil,    88,   nil,   nil,
-    64,    68,   nil,    63,    96,    53,   101,    76,    79,   nil,
-   nil,    86,   -23,   -23,   -23,   -23,    71,    94,   nil,   nil,
-    81,   nil,    92,    88,   nil,   nil,    64,    68,   nil,   nil,
-    96,    53,   101,    63,   nil,   nil,   nil,    76,    79,   nil,
-   nil,    86,   -21,   -21,   -21,   -21,    71,    94,    92,   nil,
-    81,    64,    68,    88,   nil,    96,   nil,   101,   nil,    63,
-   nil,    53,   nil,    76,    79,   nil,   nil,    86,   nil,   nil,
-   nil,   nil,    71,    94,   nil,   nil,    81,    64,    68,    88,
-   nil,    96,   nil,   101,    63,   nil,   nil,    53,    76,    79,
-   nil,   nil,    86,   nil,   nil,   nil,   nil,    71,   nil,    92,
-   nil,    81,   nil,    64,    68,   nil,   nil,    96,   nil,   101,
-    63,   nil,    53,   nil,    76,    79,   nil,   nil,    86,   nil,
-   nil,   nil,   nil,    71,    94,    92,   nil,    81,   nil,   nil,
-    88,   nil,   nil,    64,    68,   nil,    63,    96,    53,   101,
-    76,    79,   nil,   nil,    86,   nil,   nil,   nil,   nil,    71,
-    94,   nil,   nil,    81,   nil,    92,    88,   nil,   nil,    64,
-    68,   nil,   nil,    96,    53,   101,    63,   nil,   nil,   nil,
-    76,    79,   nil,   nil,    86,   nil,   nil,   nil,   nil,    71,
-    94,    64,    68,    81,   nil,    96,    88,   101,   nil,   nil,
-   nil,   nil,    63,   nil,    53,   nil,    76,    79,   nil,   nil,
-    86,   nil,    64,    68,   nil,    71,    96,   nil,   101,    81,
-   nil,   nil,   nil,   nil,    63,   nil,   nil,   nil,    76,    79,
-    53,   nil,    86,   nil,    92,   nil,   nil,    71,    64,    68,
-   nil,    81,   nil,   nil,   nil,    63,   nil,   nil,   nil,    76,
-    79,   nil,    53,    86,   nil,   nil,    64,    68,    71,    94,
-   nil,   335,    81,    64,    68,    88,   nil,    96,   nil,   101,
-   nil,    63,   nil,    53,   nil,    76,    79,   nil,   nil,    86,
-   nil,   nil,   nil,    69,    71,    64,    68,   nil,    81,   154,
-   nil,   nil,   nil,    76,   261,   nil,    63,    86,   nil,    53,
-    76,    79,   127,   nil,    86,   nil,    81,   nil,   171,    71,
-    64,    68,   nil,    81,   nil,   nil,   nil,    53,    63,   nil,
-   nil,   nil,    76,    79,    53,   nil,    86,   nil,    64,    68,
-    69,    71,    96,   nil,   101,    81,   nil,   205,   189,   190,
-   191,   192,   194,   154,   199,   203,    53,    76,   261,   nil,
-    92,    86,   nil,   nil,   nil,   nil,   127,   nil,    64,    68,
-    81,    63,    96,   nil,   101,    76,    79,   nil,   nil,    86,
-   nil,    53,   nil,   nil,    71,    94,   nil,   nil,    81,   nil,
-    92,    88,   nil,   nil,    64,    68,   nil,   nil,    96,    53,
-   101,    63,   nil,   nil,   nil,    76,    79,   nil,   nil,    86,
-   nil,   nil,   nil,   nil,    71,    94,    64,    68,    81,   nil,
-    96,    88,   101,   nil,   nil,   nil,   nil,    63,   nil,    53,
-   nil,    76,    79,   nil,   nil,    86,   nil,    64,    68,   nil,
-    71,    96,   nil,   nil,    81,   nil,   nil,   nil,   nil,    63,
-   nil,   nil,   nil,    76,    79,    53,   nil,    86,   nil,    64,
-    68,   nil,    71,    96,   nil,   101,    81,   nil,   nil,   nil,
-    63,   nil,   nil,   nil,    76,   261,   nil,    53,    86,   nil,
-    64,    68,   nil,   127,    96,   nil,   101,    81,   nil,   nil,
-   nil,   nil,    63,   nil,   nil,   nil,    76,    79,    53,   nil,
-    86,   nil,    92,   nil,   nil,    71,    64,    68,   nil,    81,
-    96,   nil,   101,    63,   nil,   nil,   nil,    76,    79,   nil,
-    53,    86,   nil,   nil,    64,    68,    71,    94,    92,   nil,
-    81,   nil,   nil,    88,   nil,   nil,   nil,   nil,   nil,    63,
-   nil,    53,   nil,    76,    79,   nil,   nil,    86,   nil,   nil,
-   nil,   nil,    71,    94,    64,    68,    81,   154,    96,    88,
-   101,    76,   261,   204,   nil,    86,   nil,    53,   nil,   nil,
-   127,   nil,   197,   202,    81,   nil,    92,   nil,   nil,   nil,
-   nil,   193,   195,   198,   201,    53,   nil,    63,   nil,   nil,
-   nil,    76,    79,    64,    68,    86,   nil,    96,   182,   101,
-    71,    94,   nil,   nil,    81,   196,   200,    88,   nil,   205,
-   189,   190,   191,   192,   194,    53,   199,   203,    64,    68,
-   nil,   nil,    96,   nil,   101,   nil,    63,   nil,   nil,   nil,
-    76,    79,   nil,   nil,    86,   nil,   nil,   nil,   nil,    71,
-    92,   nil,   nil,    81,    64,    68,   nil,   nil,    96,   nil,
-   101,    63,   nil,   nil,    53,    76,    79,   nil,   nil,    86,
-   nil,   nil,   nil,   nil,    71,    94,    92,   nil,    81,   nil,
-   nil,    88,   nil,   nil,    64,    68,   nil,    63,    96,    53,
-   101,    76,    79,   nil,   nil,    86,   nil,   nil,   nil,   nil,
-    71,    94,   nil,   nil,    81,   nil,    92,    88,   nil,   nil,
-    64,    68,   nil,   nil,    96,    53,   101,    63,   nil,   nil,
-   nil,    76,    79,   nil,   nil,    86,   nil,   nil,   nil,   nil,
-    71,    94,    92,   nil,    81,   nil,   nil,    88,   nil,   nil,
-   nil,   nil,   nil,    63,   nil,    53,   nil,    76,    79,   nil,
-   nil,    86,   264,   265,   nil,   nil,    71,    94,   nil,   nil,
-    81,   nil,   nil,    88,   nil,   197,   202,   nil,   nil,   nil,
-   nil,    53,   nil,   nil,   193,   195,   198,   201,   197,   202,
-   nil,   nil,   nil,   nil,   nil,   nil,   271,   193,   195,   198,
-   201,   nil,   nil,   205,   189,   190,   191,   nil,   196,   200,
-   199,   203,   205,   189,   190,   191,   192,   194,   nil,   199,
-   203,   196,   200,   nil,   nil,   205,   189,   190,   191,   192,
-   194,   nil,   199,   203,   197,   202,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   193,   195,   198,   201,   197,   202,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   193,   195,   198,   201,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   196,   200,   nil,
-   nil,   205,   189,   190,   191,   192,   194,   nil,   199,   203,
-   196,   200,   nil,   nil,   205,   189,   190,   191,   192,   194,
-   nil,   199,   203,   197,   202,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   193,   195,   198,   201,   197,   202,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   193,   195,   198,   201,   nil,
-   nil,   205,   189,   190,   191,   192,   194,   200,   199,   203,
-   205,   189,   190,   191,   192,   194,   nil,   199,   203,   nil,
-   nil,   nil,   nil,   205,   189,   190,   191,   192,   194,   nil,
-   199,   203,   197,   202,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   193,   195,   198,   201,   202,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   193,   202,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   193,   nil,   nil,   196,   200,   202,   nil,   205,
-   189,   190,   191,   192,   194,   193,   199,   203,   nil,   nil,
-   nil,   205,   189,   190,   191,   192,   194,   nil,   199,   203,
-   205,   189,   190,   191,   192,   194,   359,   199,   203,   nil,
-   nil,   nil,   nil,   205,   189,   190,   191,   192,   194,   nil,
-   199,   203,   nil,   nil,   nil,   306,   nil,    25,   nil,    32,
-     1,   nil,     7,    10,   nil,    16,   nil,    22,   nil,    29,
-   nil,     2,   nil,   nil,     9,    13,    25,   321,    32,     1,
-   nil,     7,    10,   nil,    16,   nil,    22,   nil,    29,   nil,
-     2,   nil,   nil,     9,    13,   nil,   346,   nil,    25,   nil,
-    32,     1,   nil,     7,    10,   nil,    16,   nil,    22,   nil,
-    29,   nil,     2,   nil,   nil,     9,    13,    25,   360,    32,
-     1,   nil,     7,    10,   nil,    16,   nil,    22,   nil,    29,
-   nil,     2,   nil,   nil,     9,    13,   nil,   370,   nil,    25,
-   nil,    32,     1,   nil,     7,    10,   nil,    16,   nil,    22,
-   nil,    29,   nil,     2,   nil,   nil,     9,    13,    25,   374,
-    32,     1,   nil,     7,    10,   nil,    16,   nil,    22,   nil,
-    29,   nil,     2,   nil,   nil,     9,    13,   nil,   376,   nil,
-    25,   nil,    32,     1,   nil,     7,    10,   nil,    16,   nil,
-    22,   nil,    29,   nil,     2,   nil,   nil,     9,    13,    25,
-   377,    32,     1,   nil,     7,    10,   nil,    16,   nil,    22,
-   nil,    29,   nil,     2,   nil,   nil,     9,    13,   nil,   293,
-   nil,    25,   nil,    32,     1,   nil,     7,    10,   nil,    16,
-   nil,    22,   nil,    29,   nil,     2,   nil,   nil,     9,    13,
-    25,   356,    32,     1,   nil,     7,    10,   nil,    16,   nil,
-    22,   nil,    29,   nil,     2,   nil,   nil,     9,    13,   nil,
-   378,   nil,    25,   nil,    32,     1,   nil,     7,    10,   nil,
-    16,   nil,    22,   nil,    29,   nil,     2,   nil,   nil,     9,
-    13,    25,   nil,    32,     1,   nil,     7,    10,   nil,    16,
-   nil,    22,   nil,    29,   nil,     2,   nil,   nil,     9,    13,
-    25,   nil,    32,     1,   nil,     7,    10,   nil,    16,   nil,
-    22,   nil,    29,   nil,     2,   nil,   nil,     9,    13 ]
+   255,   256,    55,    63,   162,    64,   227,    48,   155,    82,
+   250,   244,   181,   204,   209,   161,    46,    47,    65,   243,
+   168,   216,   200,   202,   205,   208,   219,   183,    72,    75,
+    72,    75,   102,   157,    72,    75,   227,   192,   240,   241,
+    58,  -166,    62,    60,    72,    75,   203,   207,   229,   183,
+   212,   195,   196,   197,   199,   201,   277,   206,   210,   276,
+    55,    71,  -168,    59,   198,    83,   142,    71,   191,    92,
+   304,    83,    86,   116,   136,    92,   302,   161,    89,    76,
+    79,    83,   267,   305,    89,    92,    72,    75,   325,    59,
+   136,   303,   268,   162,    89,    59,    72,    75,    58,   162,
+    55,    60,    72,    75,   161,    59,   102,   253,   106,   168,
+   161,    72,    75,   240,   241,   168,    59,   180,   346,   161,
+   254,    59,   306,    83,   267,  -169,   216,    92,   309,   161,
+   343,   219,   136,    83,   267,    71,    89,    92,    58,    83,
+    86,    60,   136,    92,    72,    75,    89,    59,    79,   191,
+    72,    75,    89,   162,   102,    37,   106,    59,  -165,    38,
+   353,    59,   172,    59,   161,   312,    11,   270,   354,   168,
+   245,   365,    97,    63,   196,   197,   172,    71,  -167,   206,
+   210,    83,    86,    71,   151,    92,   198,    83,    86,    76,
+    79,    92,   317,   318,    89,  -167,    79,   100,    72,    75,
+    89,  -164,   102,    94,   106,    59,  -165,   212,   195,   196,
+   197,    59,    37,  -183,   206,   210,    38,  -164,    37,   180,
+    97,   198,    38,    11,    72,    75,   206,   210,    82,    11,
+    14,    71,    48,   198,   335,    83,    86,   230,   274,    92,
+   206,   210,   245,   273,    79,   100,    74,   198,    89,    72,
+    75,    94,    37,   102,   337,   106,   126,    71,  -166,    59,
+   175,    83,    86,    11,    14,    92,   340,   183,   269,    76,
+    79,    97,   245,   246,    89,    72,    75,   174,  -170,   102,
+    37,   106,    71,   344,   126,    59,    83,    86,    59,   239,
+    92,    11,    14,   240,   241,    79,   100,    97,   172,    89,
+    72,    75,    94,  -169,   102,  -168,   106,   213,    71,    64,
+    59,   214,    83,    86,    72,    75,    92,   221,   102,    37,
+   106,    79,   100,    38,    82,    89,   321,   248,    94,   154,
+    11,   245,   246,    71,   120,   151,    59,    83,    86,    72,
+    75,    92,   222,   102,   120,   106,    79,    71,  -166,   275,
+    89,    83,    86,   349,   224,    92,  -164,   225,    72,    75,
+    79,    59,   116,  -167,    89,   352,   -21,   -21,   -21,   -21,
+  -165,   228,    71,   225,   209,    59,    83,    86,   196,   197,
+    92,    52,   200,   206,   210,    79,   151,  -166,  -164,    89,
+   198,   161,  -167,  -165,  -169,    83,   267,    72,    75,    92,
+    59,   102,   363,   106,   136,    50,   230,   349,    89,   369,
+   212,   195,   196,   197,   199,   201,    49,   206,   210,    59,
+   371,   227,    72,    75,   198,  -218,   102,   225,   106,   374,
+    71,    40,    39,   233,    83,    86,   236,   nil,    92,    44,
+    45,    41,    42,    79,    97,   nil,   nil,    89,    72,    75,
+   nil,   nil,   102,   nil,   106,    71,   nil,   nil,    59,    83,
+    86,   nil,   nil,    92,   -23,   -23,   -23,   -23,    79,   100,
+    97,   nil,    89,   nil,   nil,    94,   nil,   nil,    72,    75,
+   nil,    71,   102,    59,   106,    83,    86,   nil,   nil,    92,
+    44,    45,    41,    42,    79,   100,   nil,   nil,    89,   nil,
+    97,    94,   nil,   nil,    72,    75,   nil,   nil,   102,    59,
+   106,    71,   nil,   nil,   nil,    83,    86,   nil,   nil,    92,
+   nil,   nil,   nil,   nil,    79,   100,    97,   nil,    89,   nil,
+   nil,    94,   nil,   nil,    72,    75,   nil,    71,   102,    59,
+   106,    83,    86,   nil,   nil,    92,   nil,   nil,   nil,   nil,
+    79,   100,   nil,   nil,    89,   nil,    97,    94,   nil,   nil,
+    72,    75,   nil,   nil,   102,    59,   106,    71,   nil,   nil,
+   nil,    83,    86,   nil,   nil,    92,   nil,   nil,   nil,   nil,
+    79,   100,    72,    75,    89,   nil,   102,    94,   106,   nil,
+   nil,   nil,   nil,    71,   nil,    59,   nil,    83,    86,   nil,
+   nil,    92,   nil,    72,    75,   nil,    79,   102,   nil,   106,
+    89,   nil,   nil,   nil,   nil,    71,   nil,   nil,   nil,    83,
+    86,    59,   nil,    92,   nil,    97,   nil,   nil,    79,    72,
+    75,   nil,    89,   102,   nil,   106,    71,   nil,   nil,   nil,
+    83,    86,   nil,    59,    92,   nil,   nil,   nil,   nil,    79,
+   100,    97,   nil,    89,   nil,   nil,    94,   nil,   nil,    72,
+    75,   nil,    71,   102,    59,   106,    83,    86,   nil,   nil,
+    92,   nil,   nil,   nil,   nil,    79,   100,   nil,   nil,    89,
+   nil,    97,    94,   nil,   nil,    72,    75,   nil,   nil,   102,
+    59,   106,    71,   nil,   nil,   nil,    83,    86,   nil,   nil,
+    92,   nil,   nil,   nil,   nil,    79,   100,    97,   nil,    89,
+   nil,   nil,    94,   nil,   nil,    72,    75,   nil,    71,   102,
+    59,   106,    83,    86,   nil,   nil,    92,   nil,   nil,   nil,
+   nil,    79,   100,   nil,   nil,    89,   nil,    97,    94,   nil,
+   nil,    72,    75,   nil,   nil,   102,    59,   106,    71,   nil,
+   nil,   nil,    83,    86,   nil,   nil,    92,   nil,   nil,   nil,
+   nil,    79,   100,    72,    75,    89,   nil,   102,    94,   106,
+   nil,   nil,   nil,   nil,    71,   nil,    59,   nil,    83,    86,
+   nil,   nil,    92,   nil,   nil,    97,   nil,    79,    72,    75,
+   nil,    89,   102,   nil,   106,   nil,    71,   nil,    72,    75,
+    83,    86,    59,   nil,    92,   nil,   nil,   nil,   nil,    79,
+   100,   nil,   nil,    89,   209,   nil,    94,   nil,   nil,   nil,
+   nil,    71,   200,   nil,    59,    83,    86,   nil,   nil,    92,
+   nil,   161,   nil,   nil,    79,    83,   267,   nil,    89,    92,
+   nil,    72,    75,   nil,   136,   102,   nil,   106,    89,    59,
+   212,   195,   196,   197,   199,   201,   nil,   206,   210,    59,
+    72,    75,   nil,    97,   198,   nil,    72,    75,   nil,   nil,
+   102,   nil,   106,   nil,    71,   nil,   nil,   nil,    83,    86,
+   nil,   nil,    92,   338,   nil,    72,    75,    79,   100,   nil,
+   nil,    89,   nil,    71,    94,   nil,   nil,    83,    86,    71,
+   nil,    92,    59,    83,    86,    76,    79,    92,   176,   nil,
+    89,   nil,    79,   nil,   nil,   nil,    89,   nil,    71,   nil,
+   nil,    59,    83,    86,   nil,   nil,    92,    59,    72,    75,
+    76,    79,   102,   nil,   106,    89,   nil,   212,   195,   196,
+   197,   199,   201,   nil,   206,   210,    59,    72,    75,   nil,
+    97,   198,   nil,    72,    75,   nil,   212,   195,   196,   197,
+   nil,    71,   nil,   206,   210,    83,    86,   nil,   nil,    92,
+   198,   nil,   nil,   nil,    79,   100,   nil,   nil,    89,   nil,
+   161,    94,   nil,   nil,    83,   267,   161,   nil,    92,    59,
+    83,   267,   nil,   136,    92,   nil,   nil,    89,   nil,   136,
+    72,    75,   nil,    89,   102,   nil,   106,   nil,    59,   nil,
+   nil,   nil,   nil,   nil,    59,   nil,   nil,   nil,   nil,    72,
+    75,   nil,    97,   102,   nil,   106,    72,    75,   nil,   nil,
+   102,   nil,   106,    71,   nil,   nil,   nil,    83,    86,   nil,
+   nil,    92,   nil,   nil,   nil,   nil,    79,   100,    97,   nil,
+    89,   nil,    71,    94,   nil,   nil,    83,    86,   nil,    71,
+    92,    59,   nil,    83,    86,    79,   nil,    92,   nil,    89,
+    72,    75,    79,   100,   102,   nil,    89,    72,    75,    94,
+    59,   102,   nil,   106,    72,    75,   nil,    59,   102,   nil,
+   106,    72,    75,   nil,   nil,   102,   188,   106,   nil,   nil,
+   nil,   nil,   nil,    71,   nil,   nil,   nil,    83,   267,   nil,
+    71,    92,   nil,   nil,    83,    86,   136,    71,    92,   nil,
+    89,    83,    86,    79,    71,    92,   nil,    89,    83,    86,
+    79,    59,    92,   nil,    89,    72,    75,    79,    59,   nil,
+   nil,    89,    72,    75,   nil,    59,   102,   nil,   106,   nil,
+   nil,   nil,    59,    26,   nil,    33,     1,   nil,     7,    12,
+   nil,    17,   nil,    23,    97,    29,   nil,     3,   161,   nil,
+    11,    14,    83,   267,   nil,    71,    92,   nil,   nil,    83,
+    86,   136,   nil,    92,   nil,    89,   nil,   nil,    79,   100,
+   nil,   nil,    89,    72,    75,    94,    59,   102,   nil,   106,
+   nil,   nil,   nil,    59,    26,   nil,    33,     1,   nil,     7,
+    12,   nil,    17,   nil,    23,    97,    29,   nil,     3,    72,
+    75,    11,    14,   102,   nil,   106,    71,   nil,   nil,   nil,
+    83,    86,   nil,   nil,    92,   nil,   nil,   nil,   nil,    79,
+   100,    97,   nil,    89,   nil,   nil,    94,   nil,   nil,    72,
+    75,   nil,    71,   102,    59,   106,    83,    86,   211,   nil,
+    92,   nil,   nil,   nil,   nil,    79,   100,   204,   209,    89,
+   nil,    97,    94,   nil,   nil,   nil,   200,   202,   205,   208,
+    59,   nil,    71,   nil,   nil,   nil,    83,    86,   nil,   nil,
+    92,   nil,   nil,   nil,   nil,    79,   100,   nil,   nil,    89,
+   203,   207,    94,   nil,   212,   195,   196,   197,   199,   201,
+    59,   206,   210,   204,   209,   nil,   nil,   nil,   198,   nil,
+   nil,   nil,   200,   202,   205,   208,   nil,   nil,   204,   209,
+   nil,   nil,   nil,   nil,   nil,   nil,   272,   200,   202,   205,
+   208,   nil,   nil,   nil,   nil,   nil,   203,   207,   nil,   nil,
+   212,   195,   196,   197,   199,   201,   nil,   206,   210,   nil,
+   nil,   203,   207,   nil,   198,   212,   195,   196,   197,   199,
+   201,   nil,   206,   210,   204,   209,   nil,   nil,   nil,   198,
+   nil,   nil,   nil,   200,   202,   205,   208,   nil,   nil,   204,
+   209,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   200,   202,
+   205,   208,   nil,   nil,   nil,   nil,   nil,   nil,   207,   nil,
+   nil,   212,   195,   196,   197,   199,   201,   nil,   206,   210,
+   nil,   nil,   203,   207,   nil,   198,   212,   195,   196,   197,
+   199,   201,   nil,   206,   210,   204,   209,   nil,   nil,   nil,
+   198,   nil,   nil,   nil,   200,   202,   205,   208,   nil,   nil,
+   204,   209,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   200,
+   202,   205,   208,   nil,   nil,   nil,   nil,   nil,   203,   207,
+   209,   nil,   212,   195,   196,   197,   199,   201,   200,   206,
+   210,   nil,   nil,   nil,   nil,   209,   198,   212,   195,   196,
+   197,   199,   201,   200,   206,   210,   nil,   nil,   nil,   nil,
+   nil,   198,   nil,   nil,   nil,   nil,   212,   195,   196,   197,
+   199,   201,   nil,   206,   210,   308,   nil,   nil,   nil,   nil,
+   198,   212,   195,   196,   197,   199,   201,   nil,   206,   210,
+   nil,   nil,   nil,   nil,   380,   198,    26,   nil,    33,     1,
+   nil,     7,    12,   nil,    17,   nil,    23,   nil,    29,   nil,
+     3,   nil,   nil,    11,    14,    26,   372,    33,     1,   nil,
+     7,    12,   nil,    17,   nil,    23,   nil,    29,   nil,     3,
+   nil,   nil,    11,    14,   nil,   348,   nil,    26,   nil,    33,
+     1,   nil,     7,    12,   nil,    17,   nil,    23,   nil,    29,
+   nil,     3,   nil,   nil,    11,    14,    26,   295,    33,     1,
+   nil,     7,    12,   nil,    17,   nil,    23,   nil,    29,   nil,
+     3,   nil,   nil,    11,    14,   nil,   358,   nil,    26,   nil,
+    33,     1,   nil,     7,    12,   nil,    17,   nil,    23,   nil,
+    29,   nil,     3,   nil,   nil,    11,    14,    26,   379,    33,
+     1,   nil,     7,    12,   nil,    17,   nil,    23,   nil,    29,
+   nil,     3,   nil,   nil,    11,    14,   nil,   362,   nil,    26,
+   nil,    33,     1,   nil,     7,    12,   nil,    17,   nil,    23,
+   nil,    29,   nil,     3,   nil,   nil,    11,    14,    26,   378,
+    33,     1,   nil,     7,    12,   nil,    17,   nil,    23,   nil,
+    29,   nil,     3,   nil,   nil,    11,    14,   nil,   376,   nil,
+    26,   nil,    33,     1,   nil,     7,    12,   nil,    17,   nil,
+    23,   nil,    29,   nil,     3,   nil,   nil,    11,    14,    26,
+   361,    33,     1,   nil,     7,    12,   nil,    17,   nil,    23,
+   nil,    29,   nil,     3,   nil,   nil,    11,    14,   nil,   323,
+   nil,    26,   nil,    33,     1,   nil,     7,    12,   nil,    17,
+   nil,    23,   nil,    29,   nil,     3,   nil,   nil,    11,    14,
+    26,   nil,    33,     1,   nil,     7,    12,   nil,    17,   nil,
+    23,   nil,    29,   nil,     3,   nil,   nil,    11,    14,   212,
+   195,   196,   197,   199,   201,   nil,   206,   210,   nil,   nil,
+   nil,   nil,   nil,   198 ]
 
 racc_action_check = [
-   197,   197,   149,    19,   197,    19,   197,   151,    79,   142,
-   237,   170,    56,    33,    48,   208,   155,    16,    19,   169,
-   169,   217,   197,    56,   170,   212,    79,   155,    56,   364,
-   364,   134,   155,   197,   217,   237,   237,   197,   197,    48,
-   149,   197,    19,   149,   134,   151,   197,   197,   151,    82,
-   197,   142,   169,   197,   168,    16,   169,   169,    16,   215,
-   169,   197,   364,   149,   169,   169,   364,   364,   151,   169,
-   364,   172,   172,   351,   351,   364,   268,   172,    16,   364,
-   169,    60,   168,   168,   338,   338,     7,   336,   336,   268,
-   364,   336,    60,   336,     1,     7,     7,    60,     1,   216,
-   101,   101,   240,    84,   172,     1,   351,   101,   172,   172,
-   351,   351,   172,   240,   351,   274,   274,   172,   240,   351,
-   336,   172,   274,   351,   336,   336,   302,   219,   336,   176,
-   176,   302,   172,   336,   351,    94,    94,   336,   101,    94,
-    10,    94,   297,   111,    10,    77,   184,   111,   336,   184,
-   297,    10,   176,   274,   111,   111,   157,    94,   120,   278,
-   278,   221,   176,   120,   157,    74,   176,   176,    94,   223,
-   176,   224,    94,    94,   176,   176,    94,   262,   262,   176,
-   225,    94,    94,    22,    22,    94,    73,    22,    94,    72,
-   176,    26,   228,   177,   177,    26,    94,   177,   229,   177,
-   119,   203,    26,    26,   119,    22,   279,   279,   233,   283,
-   262,   119,   119,    71,   262,   262,    22,   283,   262,    87,
-    22,    22,    67,   262,    22,    65,   177,   262,    22,    22,
-   177,   177,    93,    22,   177,    63,    25,    25,   262,   177,
-    25,   248,    25,   177,    22,   283,   283,   283,   283,   283,
-   283,   249,   283,   283,   177,    29,    29,    95,    25,    29,
-   231,    29,   118,   118,   231,   255,   118,   231,   118,    25,
-   261,   231,    59,    25,    25,   294,   294,    25,    58,   199,
-   294,   294,    25,    25,   118,   270,    25,   272,    29,    25,
-    98,    99,    29,    29,   100,   118,    29,    25,   102,   118,
-   118,    29,   106,   118,   107,    29,    40,    40,   118,   118,
-    40,   109,   118,   304,   304,   118,    29,   304,   117,   304,
-   300,   300,   188,   118,   300,    46,   300,   295,   295,   280,
-   280,   280,   280,    45,   295,    41,   280,   280,    36,    40,
-   122,   125,    80,    40,    40,   293,   304,    40,   126,    32,
-   304,   304,    40,   300,   304,   128,    40,   300,   300,   304,
-   295,   300,   167,   304,   295,   295,   300,    40,   295,   166,
-   300,   162,   165,   295,   304,   162,   162,   295,   189,   189,
-   129,   300,   189,   311,   189,   150,   131,   323,   295,     0,
-   325,     0,     0,   326,     0,     0,   327,     0,   329,     0,
-   189,     0,   334,     0,   190,   190,     0,     0,   190,    12,
-   190,   189,   277,   277,   147,   189,   189,   277,   277,   189,
-    34,    34,    34,    34,   189,   189,   190,   346,   189,   347,
-   146,   189,   352,   132,   191,   191,   363,   190,   191,   189,
-   191,   190,   190,   175,     5,   190,   365,   175,   175,     4,
-   190,   190,     2,   143,   190,   138,   191,   190,   181,   nil,
-   192,   192,   181,   181,   192,   190,   192,   191,   nil,   164,
-   nil,   191,   191,   164,   164,   191,    30,    30,    30,    30,
-   191,   191,   192,   nil,   191,   nil,   nil,   191,   nil,   nil,
-    42,    42,   nil,   192,    42,   191,    42,   192,   192,   nil,
-   nil,   192,    31,    31,    31,    31,   192,   192,   nil,   nil,
-   192,   nil,    42,   192,   nil,   nil,    43,    43,   nil,   nil,
-    43,   192,    43,    42,   nil,   nil,   nil,    42,    42,   nil,
-   nil,    42,    24,    24,    24,    24,    42,    42,    43,   nil,
-    42,    44,    44,    42,   nil,    44,   nil,    44,   nil,    43,
-   nil,    42,   nil,    43,    43,   nil,   nil,    43,   nil,   nil,
-   nil,   nil,    43,    43,   nil,   nil,    43,   193,   193,    43,
-   nil,   193,   nil,   193,    44,   nil,   nil,    43,    44,    44,
-   nil,   nil,    44,   nil,   nil,   nil,   nil,    44,   nil,   193,
-   nil,    44,   nil,   201,   201,   nil,   nil,   201,   nil,   201,
-   193,   nil,    44,   nil,   193,   193,   nil,   nil,   193,   nil,
-   nil,   nil,   nil,   193,   193,   201,   nil,   193,   nil,   nil,
-   193,   nil,   nil,   194,   194,   nil,   201,   194,   193,   194,
-   201,   201,   nil,   nil,   201,   nil,   nil,   nil,   nil,   201,
-   201,   nil,   nil,   201,   nil,   194,   201,   nil,   nil,   276,
-   276,   nil,   nil,   276,   201,   276,   194,   nil,   nil,   nil,
-   194,   194,   nil,   nil,   194,   nil,   nil,   nil,   nil,   194,
-   194,    57,    57,   194,   nil,    57,   194,    57,   nil,   nil,
-   nil,   nil,   276,   nil,   194,   nil,   276,   276,   nil,   nil,
-   276,   nil,   264,   264,   nil,   276,   264,   nil,   264,   276,
-   nil,   nil,   nil,   nil,    57,   nil,   nil,   nil,    57,    57,
-   276,   nil,    57,   nil,   264,   nil,   nil,    57,   253,   253,
-   nil,    57,   nil,   nil,   nil,   264,   nil,   nil,   nil,   264,
-   264,   nil,    57,   264,   nil,   nil,   239,   239,   264,   264,
-   nil,   253,   264,   246,   246,   264,   nil,   246,   nil,   246,
-   nil,   253,   nil,   264,   nil,   253,   253,   nil,   nil,   253,
-   nil,   nil,   nil,   253,   253,    66,    66,   nil,   253,   239,
-   nil,   nil,   nil,   239,   239,   nil,   246,   239,   nil,   253,
-   246,   246,   239,   nil,   246,   nil,   239,   nil,    66,   246,
-   238,   238,   nil,   246,   nil,   nil,   nil,   239,    66,   nil,
-   nil,   nil,    66,    66,   246,   nil,    66,   nil,    68,    68,
-    66,    66,    68,   nil,    68,    66,   nil,   281,   281,   281,
-   281,   281,   281,   238,   281,   281,    66,   238,   238,   nil,
-    68,   238,   nil,   nil,   nil,   nil,   238,   nil,   195,   195,
-   238,    68,   195,   nil,   195,    68,    68,   nil,   nil,    68,
-   nil,   238,   nil,   nil,    68,    68,   nil,   nil,    68,   nil,
-   195,    68,   nil,   nil,   227,   227,   nil,   nil,   227,    68,
-   227,   195,   nil,   nil,   nil,   195,   195,   nil,   nil,   195,
-   nil,   nil,   nil,   nil,   195,   195,   226,   226,   195,   nil,
-   226,   195,   226,   nil,   nil,   nil,   nil,   227,   nil,   195,
-   nil,   227,   227,   nil,   nil,   227,   nil,   222,   222,   nil,
-   227,   222,   nil,   nil,   227,   nil,   nil,   nil,   nil,   226,
-   nil,   nil,   nil,   226,   226,   227,   nil,   226,   nil,    75,
-    75,   nil,   226,    75,   nil,    75,   226,   nil,   nil,   nil,
-   222,   nil,   nil,   nil,   222,   222,   nil,   226,   222,   nil,
-   196,   196,   nil,   222,   196,   nil,   196,   222,   nil,   nil,
-   nil,   nil,    75,   nil,   nil,   nil,    75,    75,   222,   nil,
-    75,   nil,   196,   nil,   nil,    75,   198,   198,   nil,    75,
-   198,   nil,   198,   196,   nil,   nil,   nil,   196,   196,   nil,
-    75,   196,   nil,   nil,   206,   206,   196,   196,   198,   nil,
-   196,   nil,   nil,   196,   nil,   nil,   nil,   nil,   nil,   198,
-   nil,   196,   nil,   198,   198,   nil,   nil,   198,   nil,   nil,
-   nil,   nil,   198,   198,   205,   205,   198,   206,   205,   198,
-   205,   206,   206,   104,   nil,   206,   nil,   198,   nil,   nil,
-   206,   nil,   104,   104,   206,   nil,   205,   nil,   nil,   nil,
-   nil,   104,   104,   104,   104,   206,   nil,   205,   nil,   nil,
-   nil,   205,   205,    96,    96,   205,   nil,    96,    96,    96,
-   205,   205,   nil,   nil,   205,   104,   104,   205,   nil,   104,
-   104,   104,   104,   104,   104,   205,   104,   104,   202,   202,
-   nil,   nil,   202,   nil,   202,   nil,    96,   nil,   nil,   nil,
-    96,    96,   nil,   nil,    96,   nil,   nil,   nil,   nil,    96,
-   202,   nil,   nil,    96,    88,    88,   nil,   nil,    88,   nil,
-    88,   202,   nil,   nil,    96,   202,   202,   nil,   nil,   202,
-   nil,   nil,   nil,   nil,   202,   202,    88,   nil,   202,   nil,
-   nil,   202,   nil,   nil,    92,    92,   nil,    88,    92,   202,
-    92,    88,    88,   nil,   nil,    88,   nil,   nil,   nil,   nil,
-    88,    88,   nil,   nil,    88,   nil,    92,    88,   nil,   nil,
-   200,   200,   nil,   nil,   200,    88,   200,    92,   nil,   nil,
-   nil,    92,    92,   nil,   nil,    92,   nil,   nil,   nil,   nil,
-    92,    92,   200,   nil,    92,   nil,   nil,    92,   nil,   nil,
-   nil,   nil,   nil,   200,   nil,    92,   nil,   200,   200,   nil,
-   nil,   200,   174,   174,   nil,   nil,   200,   200,   nil,   nil,
-   200,   nil,   nil,   200,   nil,   174,   174,   nil,   nil,   nil,
-   nil,   200,   nil,   nil,   174,   174,   174,   174,   179,   179,
-   nil,   nil,   nil,   nil,   nil,   nil,   179,   179,   179,   179,
-   179,   nil,   nil,   282,   282,   282,   282,   nil,   174,   174,
-   282,   282,   174,   174,   174,   174,   174,   174,   nil,   174,
-   174,   179,   179,   nil,   nil,   179,   179,   179,   179,   179,
-   179,   nil,   179,   179,   213,   213,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   213,   213,   213,   213,   145,   145,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   145,   145,   145,   145,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   213,   213,   nil,
-   nil,   213,   213,   213,   213,   213,   213,   nil,   213,   213,
-   145,   145,   nil,   nil,   145,   145,   145,   145,   145,   145,
-   nil,   145,   145,   284,   284,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   284,   284,   284,   284,   288,   288,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   288,   288,   288,   288,   nil,
-   nil,   290,   290,   290,   290,   290,   290,   284,   290,   290,
-   284,   284,   284,   284,   284,   284,   nil,   284,   284,   nil,
-   nil,   nil,   nil,   288,   288,   288,   288,   288,   288,   nil,
-   288,   288,   144,   144,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   144,   144,   144,   144,   285,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   285,   289,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   289,   nil,   nil,   144,   144,   286,   nil,   144,
-   144,   144,   144,   144,   144,   286,   144,   144,   nil,   nil,
-   nil,   285,   285,   285,   285,   285,   285,   nil,   285,   285,
-   289,   289,   289,   289,   289,   289,   319,   289,   289,   nil,
-   nil,   nil,   nil,   286,   286,   286,   286,   286,   286,   nil,
-   286,   286,   nil,   nil,   nil,   220,   nil,   319,   nil,   319,
-   319,   nil,   319,   319,   nil,   319,   nil,   319,   nil,   319,
-   nil,   319,   nil,   nil,   319,   319,   220,   235,   220,   220,
-   nil,   220,   220,   nil,   220,   nil,   220,   nil,   220,   nil,
-   220,   nil,   nil,   220,   220,   nil,   292,   nil,   235,   nil,
-   235,   235,   nil,   235,   235,   nil,   235,   nil,   235,   nil,
-   235,   nil,   235,   nil,   nil,   235,   235,   292,   320,   292,
-   292,   nil,   292,   292,   nil,   292,   nil,   292,   nil,   292,
-   nil,   292,   nil,   nil,   292,   292,   nil,   358,   nil,   320,
-   nil,   320,   320,   nil,   320,   320,   nil,   320,   nil,   320,
-   nil,   320,   nil,   320,   nil,   nil,   320,   320,   358,   367,
-   358,   358,   nil,   358,   358,   nil,   358,   nil,   358,   nil,
-   358,   nil,   358,   nil,   nil,   358,   358,   nil,   369,   nil,
-   367,   nil,   367,   367,   nil,   367,   367,   nil,   367,   nil,
-   367,   nil,   367,   nil,   367,   nil,   nil,   367,   367,   369,
-   373,   369,   369,   nil,   369,   369,   nil,   369,   nil,   369,
-   nil,   369,   nil,   369,   nil,   nil,   369,   369,   nil,   204,
-   nil,   373,   nil,   373,   373,   nil,   373,   373,   nil,   373,
-   nil,   373,   nil,   373,   nil,   373,   nil,   nil,   373,   373,
-   204,   305,   204,   204,   nil,   204,   204,   nil,   204,   nil,
-   204,   nil,   204,   nil,   204,   nil,   nil,   204,   204,   nil,
-   375,   nil,   305,   nil,   305,   305,   nil,   305,   305,   nil,
-   305,   nil,   305,   nil,   305,   nil,   305,   nil,   nil,   305,
-   305,   375,   nil,   375,   375,   nil,   375,   375,   nil,   375,
-   nil,   375,   nil,   375,   nil,   375,   nil,   nil,   375,   375,
-    15,   nil,    15,    15,   nil,    15,    15,   nil,    15,   nil,
-    15,   nil,    15,   nil,    15,   nil,   nil,    15,    15 ]
+   179,   179,   157,    22,    65,    22,   151,     7,    54,    86,
+   173,   164,    78,   179,   179,    65,     7,     7,    22,   164,
+    65,   120,   179,   179,   179,   179,   120,    86,    49,    49,
+   106,   106,    49,    54,   180,   180,   142,   106,   173,   173,
+   157,    95,    22,   157,   366,   366,   179,   179,   151,   142,
+   179,   179,   179,   179,   179,   179,   193,   179,   179,   193,
+   155,    49,    91,   157,   179,    49,    49,   180,   106,    49,
+   218,   180,   180,   214,    49,   180,   216,   366,    49,   180,
+   180,   366,   366,   218,   180,   366,   181,   181,   242,    49,
+   366,   217,   181,    62,   366,   180,   353,   353,   155,   238,
+    17,   155,   340,   340,    62,   366,   340,   177,   340,    62,
+   238,   276,   276,   242,   242,   238,   210,   271,   276,   181,
+   177,   155,   219,   181,   181,    90,   304,   181,   223,   353,
+   271,   304,   181,   353,   353,   340,   181,   353,    17,   340,
+   340,    17,   353,   340,   183,   183,   353,   181,   340,   276,
+   195,   195,   340,   162,   195,    12,   195,   353,    87,    12,
+   299,    17,   225,   340,   162,   226,    12,   183,   299,   162,
+   342,   342,   195,    85,   278,   278,   228,   183,    84,   278,
+   278,   183,   183,   195,   230,   183,   278,   195,   195,   183,
+   183,   195,   231,   232,   183,   103,   195,   195,   196,   196,
+   195,    81,   196,   195,   196,   183,   105,   282,   282,   282,
+   282,   195,     1,    79,   282,   282,     1,   101,    30,    77,
+   196,   282,    30,     1,    23,    23,   279,   279,    23,    30,
+    30,   196,    71,   279,   249,   196,   196,   251,   187,   196,
+   280,   280,   187,   187,   196,   196,    23,   280,   196,    26,
+    26,   196,   119,    26,   252,    26,   119,    23,    69,   196,
+    67,    23,    23,   119,   119,    23,   261,   267,   182,    23,
+    23,    26,   182,   182,    23,   197,   197,    66,   107,   197,
+    43,   197,    26,   273,    43,    23,    26,    26,   206,   159,
+    26,    43,    43,   159,   159,    26,    26,   197,    64,    26,
+    29,    29,    26,   108,    29,   109,    29,   113,   197,   114,
+    26,   118,   197,   197,   306,   306,   197,   122,   306,   233,
+   306,   197,   197,   233,   126,   197,   233,   170,   197,    52,
+   233,   170,   170,    29,    51,    50,   197,    29,    29,   302,
+   302,    29,   131,   302,    36,   302,    29,   306,   132,   190,
+    29,   306,   306,   295,   135,   306,   137,   138,   297,   297,
+   306,    29,    33,   139,   306,   297,    28,    28,    28,    28,
+   141,   143,   302,   314,   285,   306,   302,   302,   296,   296,
+   302,    16,   285,   296,   296,   302,   174,   326,   327,   302,
+   296,   297,   329,   330,   331,   297,   297,   198,   198,   297,
+   302,   198,   336,   198,   297,     9,   152,   348,   297,   349,
+   285,   285,   285,   285,   285,   285,     8,   285,   285,   297,
+   354,   172,   199,   199,   285,   365,   199,   171,   199,   367,
+   198,     3,     2,   153,   198,   198,   156,   nil,   198,     4,
+     4,     4,     4,   198,   199,   nil,   nil,   198,    97,    97,
+   nil,   nil,    97,   nil,    97,   199,   nil,   nil,   198,   199,
+   199,   nil,   nil,   199,    35,    35,    35,    35,   199,   199,
+    97,   nil,   199,   nil,   nil,   199,   nil,   nil,   200,   200,
+   nil,    97,   200,   199,   200,    97,    97,   nil,   nil,    97,
+    34,    34,    34,    34,    97,    97,   nil,   nil,    97,   nil,
+   200,    97,   nil,   nil,    46,    46,   nil,   nil,    46,    97,
+    46,   200,   nil,   nil,   nil,   200,   200,   nil,   nil,   200,
+   nil,   nil,   nil,   nil,   200,   200,    46,   nil,   200,   nil,
+   nil,   200,   nil,   nil,    47,    47,   nil,    46,    47,   200,
+    47,    46,    46,   nil,   nil,    46,   nil,   nil,   nil,   nil,
+    46,    46,   nil,   nil,    46,   nil,    47,    46,   nil,   nil,
+    48,    48,   nil,   nil,    48,    46,    48,    47,   nil,   nil,
+   nil,    47,    47,   nil,   nil,    47,   nil,   nil,   nil,   nil,
+    47,    47,   175,   175,    47,   nil,   175,    47,   175,   nil,
+   nil,   nil,   nil,    48,   nil,    47,   nil,    48,    48,   nil,
+   nil,    48,   nil,   201,   201,   nil,    48,   201,   nil,   201,
+    48,   nil,   nil,   nil,   nil,   175,   nil,   nil,   nil,   175,
+   175,    48,   nil,   175,   nil,   201,   nil,   nil,   175,   202,
+   202,   nil,   175,   202,   nil,   202,   201,   nil,   nil,   nil,
+   201,   201,   nil,   175,   201,   nil,   nil,   nil,   nil,   201,
+   201,   202,   nil,   201,   nil,   nil,   201,   nil,   nil,   203,
+   203,   nil,   202,   203,   201,   203,   202,   202,   nil,   nil,
+   202,   nil,   nil,   nil,   nil,   202,   202,   nil,   nil,   202,
+   nil,   203,   202,   nil,   nil,   204,   204,   nil,   nil,   204,
+   202,   204,   203,   nil,   nil,   nil,   203,   203,   nil,   nil,
+   203,   nil,   nil,   nil,   nil,   203,   203,   204,   nil,   203,
+   nil,   nil,   203,   nil,   nil,   205,   205,   nil,   204,   205,
+   203,   205,   204,   204,   nil,   nil,   204,   nil,   nil,   nil,
+   nil,   204,   204,   nil,   nil,   204,   nil,   205,   204,   nil,
+   nil,    63,    63,   nil,   nil,    63,   204,    63,   205,   nil,
+   nil,   nil,   205,   205,   nil,   nil,   205,   nil,   nil,   nil,
+   nil,   205,   205,   207,   207,   205,   nil,   207,   205,   207,
+   nil,   nil,   nil,   nil,    63,   nil,   205,   nil,    63,    63,
+   nil,   nil,    63,   nil,   nil,   207,   nil,    63,   275,   275,
+   nil,    63,   275,   nil,   275,   nil,   207,   nil,   268,   268,
+   207,   207,    63,   nil,   207,   nil,   nil,   nil,   nil,   207,
+   207,   nil,   nil,   207,   288,   nil,   207,   nil,   nil,   nil,
+   nil,   275,   288,   nil,   207,   275,   275,   nil,   nil,   275,
+   nil,   268,   nil,   nil,   275,   268,   268,   nil,   275,   268,
+   nil,   255,   255,   nil,   268,   255,   nil,   255,   268,   275,
+   288,   288,   288,   288,   288,   288,   nil,   288,   288,   268,
+   253,   253,   nil,   255,   288,   nil,   247,   247,   nil,   nil,
+   247,   nil,   247,   nil,   255,   nil,   nil,   nil,   255,   255,
+   nil,   nil,   255,   253,   nil,    74,    74,   255,   255,   nil,
+   nil,   255,   nil,   253,   255,   nil,   nil,   253,   253,   247,
+   nil,   253,   255,   247,   247,   253,   253,   247,    74,   nil,
+   253,   nil,   247,   nil,   nil,   nil,   247,   nil,    74,   nil,
+   nil,   253,    74,    74,   nil,   nil,    74,   247,    75,    75,
+    74,    74,    75,   nil,    75,    74,   nil,   283,   283,   283,
+   283,   283,   283,   nil,   283,   283,    74,   244,   244,   nil,
+    75,   283,   nil,   243,   243,   nil,   284,   284,   284,   284,
+   nil,    75,   nil,   284,   284,    75,    75,   nil,   nil,    75,
+   284,   nil,   nil,   nil,    75,    75,   nil,   nil,    75,   nil,
+   244,    75,   nil,   nil,   244,   244,   243,   nil,   244,    75,
+   243,   243,   nil,   244,   243,   nil,   nil,   244,   nil,   243,
+   208,   208,   nil,   243,   208,   nil,   208,   nil,   244,   nil,
+   nil,   nil,   nil,   nil,   243,   nil,   nil,   nil,   nil,    82,
+    82,   nil,   208,    82,   nil,    82,   209,   209,   nil,   nil,
+   209,   nil,   209,   208,   nil,   nil,   nil,   208,   208,   nil,
+   nil,   208,   nil,   nil,   nil,   nil,   208,   208,   209,   nil,
+   208,   nil,    82,   208,   nil,   nil,    82,    82,   nil,   209,
+    82,   208,   nil,   209,   209,    82,   nil,   209,   nil,    82,
+   224,   224,   209,   209,   224,   nil,   209,   229,   229,   209,
+    82,   229,   nil,   229,   227,   227,   nil,   209,   227,   nil,
+   227,   102,   102,   nil,   nil,   102,   102,   102,   nil,   nil,
+   nil,   nil,   nil,   224,   nil,   nil,   nil,   224,   224,   nil,
+   229,   224,   nil,   nil,   229,   229,   224,   227,   229,   nil,
+   224,   227,   227,   229,   102,   227,   nil,   229,   102,   102,
+   227,   224,   102,   nil,   227,   213,   213,   102,   229,   nil,
+   nil,   102,   100,   100,   nil,   227,   100,   nil,   100,   nil,
+   nil,   nil,   102,    19,   nil,    19,    19,   nil,    19,    19,
+   nil,    19,   nil,    19,   100,    19,   nil,    19,   213,   nil,
+    19,    19,   213,   213,   nil,   100,   213,   nil,   nil,   100,
+   100,   213,   nil,   100,   nil,   213,   nil,   nil,   100,   100,
+   nil,   nil,   100,    94,    94,   100,   213,    94,   nil,    94,
+   nil,   nil,   nil,   100,     0,   nil,     0,     0,   nil,     0,
+     0,   nil,     0,   nil,     0,    94,     0,   nil,     0,   212,
+   212,     0,     0,   212,   nil,   212,    94,   nil,   nil,   nil,
+    94,    94,   nil,   nil,    94,   nil,   nil,   nil,   nil,    94,
+    94,   212,   nil,    94,   nil,   nil,    94,   nil,   nil,    39,
+    39,   nil,   212,    39,    94,    39,   212,   212,   111,   nil,
+   212,   nil,   nil,   nil,   nil,   212,   212,   111,   111,   212,
+   nil,    39,   212,   nil,   nil,   nil,   111,   111,   111,   111,
+   212,   nil,    39,   nil,   nil,   nil,    39,    39,   nil,   nil,
+    39,   nil,   nil,   nil,   nil,    39,    39,   nil,   nil,    39,
+   111,   111,    39,   nil,   111,   111,   111,   111,   111,   111,
+    39,   111,   111,   130,   130,   nil,   nil,   nil,   111,   nil,
+   nil,   nil,   130,   130,   130,   130,   nil,   nil,   185,   185,
+   nil,   nil,   nil,   nil,   nil,   nil,   185,   185,   185,   185,
+   185,   nil,   nil,   nil,   nil,   nil,   130,   130,   nil,   nil,
+   130,   130,   130,   130,   130,   130,   nil,   130,   130,   nil,
+   nil,   185,   185,   nil,   130,   185,   185,   185,   185,   185,
+   185,   nil,   185,   185,   286,   286,   nil,   nil,   nil,   185,
+   nil,   nil,   nil,   286,   286,   286,   286,   nil,   nil,   129,
+   129,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   129,   129,
+   129,   129,   nil,   nil,   nil,   nil,   nil,   nil,   286,   nil,
+   nil,   286,   286,   286,   286,   286,   286,   nil,   286,   286,
+   nil,   nil,   129,   129,   nil,   286,   129,   129,   129,   129,
+   129,   129,   nil,   129,   129,   123,   123,   nil,   nil,   nil,
+   129,   nil,   nil,   nil,   123,   123,   123,   123,   nil,   nil,
+   290,   290,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   290,
+   290,   290,   290,   nil,   nil,   nil,   nil,   nil,   123,   123,
+   287,   nil,   123,   123,   123,   123,   123,   123,   287,   123,
+   123,   nil,   nil,   nil,   nil,   291,   123,   290,   290,   290,
+   290,   290,   290,   291,   290,   290,   nil,   nil,   nil,   nil,
+   nil,   290,   nil,   nil,   nil,   nil,   287,   287,   287,   287,
+   287,   287,   nil,   287,   287,   221,   nil,   nil,   nil,   nil,
+   287,   291,   291,   291,   291,   291,   291,   nil,   291,   291,
+   nil,   nil,   nil,   nil,   377,   291,   221,   nil,   221,   221,
+   nil,   221,   221,   nil,   221,   nil,   221,   nil,   221,   nil,
+   221,   nil,   nil,   221,   221,   377,   360,   377,   377,   nil,
+   377,   377,   nil,   377,   nil,   377,   nil,   377,   nil,   377,
+   nil,   nil,   377,   377,   nil,   294,   nil,   360,   nil,   360,
+   360,   nil,   360,   360,   nil,   360,   nil,   360,   nil,   360,
+   nil,   360,   nil,   nil,   360,   360,   294,   211,   294,   294,
+   nil,   294,   294,   nil,   294,   nil,   294,   nil,   294,   nil,
+   294,   nil,   nil,   294,   294,   nil,   307,   nil,   211,   nil,
+   211,   211,   nil,   211,   211,   nil,   211,   nil,   211,   nil,
+   211,   nil,   211,   nil,   nil,   211,   211,   307,   375,   307,
+   307,   nil,   307,   307,   nil,   307,   nil,   307,   nil,   307,
+   nil,   307,   nil,   nil,   307,   307,   nil,   322,   nil,   375,
+   nil,   375,   375,   nil,   375,   375,   nil,   375,   nil,   375,
+   nil,   375,   nil,   375,   nil,   nil,   375,   375,   322,   371,
+   322,   322,   nil,   322,   322,   nil,   322,   nil,   322,   nil,
+   322,   nil,   322,   nil,   nil,   322,   322,   nil,   369,   nil,
+   371,   nil,   371,   371,   nil,   371,   371,   nil,   371,   nil,
+   371,   nil,   371,   nil,   371,   nil,   nil,   371,   371,   369,
+   318,   369,   369,   nil,   369,   369,   nil,   369,   nil,   369,
+   nil,   369,   nil,   369,   nil,   nil,   369,   369,   nil,   236,
+   nil,   318,   nil,   318,   318,   nil,   318,   318,   nil,   318,
+   nil,   318,   nil,   318,   nil,   318,   nil,   nil,   318,   318,
+   236,   nil,   236,   236,   nil,   236,   236,   nil,   236,   nil,
+   236,   nil,   236,   nil,   236,   nil,   nil,   236,   236,   292,
+   292,   292,   292,   292,   292,   nil,   292,   292,   nil,   nil,
+   nil,   nil,   nil,   292 ]
 
 racc_action_pointer = [
-   359,    58,   408,   nil,   441,   436,   nil,    80,   nil,   nil,
-   104,   nil,   409,   nil,   nil,  1700,    15,   nil,   nil,    -3,
-   nil,   nil,   181,   nil,   468,   234,   155,   nil,   nil,   253,
-   412,   438,   347,    -2,   356,   nil,   314,   nil,   nil,   nil,
-   304,   295,   488,   514,   539,   309,   325,   nil,     2,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   -12,   669,   238,   264,
-    57,   nil,   nil,   229,   nil,   213,   763,   199,   806,   nil,
-   nil,   207,   166,   163,   159,   927,   nil,   122,   nil,     2,
-   319,   nil,    26,   nil,    97,   nil,   nil,   196,  1112,   nil,
-   nil,   nil,  1142,   209,   133,   234,  1061,   nil,   267,   268,
-   271,    98,   275,   nil,  1025,   nil,   279,   296,   nil,   303,
-   nil,   107,   nil,   nil,   nil,   nil,   nil,   306,   260,   164,
-   123,   nil,   332,   nil,   nil,   300,   325,   nil,   343,   357,
-   nil,   363,   413,   nil,    20,   nil,   nil,   nil,   432,   nil,
-   nil,   nil,    -2,   441,  1385,  1280,   423,   377,   nil,     0,
-   377,     5,   nil,   nil,   nil,    -8,   nil,   138,   nil,   nil,
-   nil,   nil,   325,   nil,   462,   360,   358,   322,    32,    17,
-    -1,   nil,    69,   nil,  1208,   436,   127,   191,   nil,  1221,
-   nil,   451,   nil,   nil,   137,   nil,   nil,   nil,   311,   376,
-   402,   432,   458,   565,   621,   836,   948,    -2,   974,   216,
-  1168,   591,  1086,   138,  1640,  1022,   992,   nil,     9,   nil,
-   nil,   nil,    23,  1267,   nil,    44,    74,     9,   nil,   112,
-  1476,   152,   905,   129,   162,   140,   884,   862,   152,   189,
-   nil,   224,   nil,   200,   nil,  1498,   nil,   -15,   788,   734,
-    78,   nil,   nil,   nil,   nil,   nil,   741,   nil,   232,   239,
-   nil,   nil,   nil,   716,   nil,   254,   nil,   nil,   nil,   nil,
-   nil,   246,   175,   nil,   690,   nil,   nil,   nil,    64,   nil,
-   278,   nil,   280,   nil,   113,   nil,   647,   356,    98,   145,
-   275,   763,  1199,   191,  1326,  1397,  1419,   nil,  1339,  1406,
-  1317,   nil,  1517,   314,   219,   325,   nil,   130,   nil,   nil,
-   318,   nil,    91,   nil,   311,  1662,   nil,   nil,   nil,   nil,
-   nil,   371,   nil,   nil,   nil,   nil,   nil,   nil,   nil,  1457,
-  1539,   nil,   nil,   364,   nil,   367,   370,   373,   nil,   375,
-   nil,   nil,   nil,   nil,   393,   nil,    85,   nil,    73,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   396,   421,   nil,   nil,
-   nil,    71,   424,   nil,   nil,   nil,   nil,   nil,  1558,   nil,
-   nil,   nil,   nil,   427,    27,   437,   nil,  1580,   nil,  1599,
-   nil,   nil,   nil,  1621,   nil,  1681,   nil,   nil,   nil ]
+  1174,   176,   417,   387,   375,   nil,   nil,     1,   408,   397,
+   nil,   nil,   119,   nil,   nil,   nil,   381,    98,   nil,  1123,
+   nil,   nil,    -3,   222,   nil,   nil,   247,   nil,   302,   298,
+   182,   nil,   nil,   360,   426,   400,   320,   nil,   nil,  1247,
+   nil,   nil,   nil,   244,   nil,   nil,   502,   532,   558,    26,
+   295,   310,   329,   nil,    -4,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,    69,   739,   258,   -20,   269,   254,   nil,   235,
+   nil,   226,   nil,   nil,   883,   926,   nil,   207,   -11,   207,
+   nil,   178,  1017,   nil,   155,   167,     3,   135,   nil,   nil,
+   102,    39,   nil,   nil,  1191,    18,   nil,   446,   nil,   nil,
+  1140,   194,  1089,   172,   nil,   183,    28,   255,   280,   282,
+   nil,  1250,   nil,   299,   301,   nil,   nil,   nil,   299,   216,
+   -14,   nil,   309,  1418,   nil,   nil,   318,   nil,   nil,  1372,
+  1296,   335,   325,   nil,   nil,   313,   nil,   333,   345,   340,
+   nil,   347,    25,   351,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,    -5,   394,   396,   nil,    58,   428,     0,   nil,   243,
+   nil,   nil,   129,   nil,    -7,   nil,   nil,   nil,   nil,   nil,
+   320,   415,   410,   -12,   346,   580,   nil,    95,   nil,    -4,
+    32,    84,   261,   142,   nil,  1311,   nil,   231,   nil,   nil,
+   338,   nil,   nil,    47,   nil,   148,   196,   273,   395,   420,
+   476,   601,   627,   657,   683,   713,   225,   761,   998,  1024,
+    53,  1588,  1217,  1133,    71,   nil,    61,    66,    58,   107,
+   nil,  1506,   nil,   119,  1068,   122,   156,  1082,   136,  1075,
+   144,   183,   185,   283,   nil,   nil,  1730,   nil,    75,   nil,
+   nil,   nil,    63,   951,   945,   nil,   nil,   864,   nil,   225,
+   nil,   225,   247,   858,   nil,   839,   nil,   nil,   nil,   nil,
+   nil,   255,   nil,   nil,   nil,   nil,   nil,   243,   796,   nil,
+   nil,   105,   nil,   276,   nil,   786,   109,   nil,   118,   165,
+   179,   nil,   153,   883,   902,   356,  1357,  1452,   796,   nil,
+  1433,  1467,  1725,   nil,  1566,   322,   322,   356,   nil,   148,
+   nil,   nil,   337,   nil,    91,   nil,   312,  1607,   nil,   nil,
+   nil,   nil,   nil,   nil,   361,   nil,   nil,   nil,  1711,   nil,
+   nil,   nil,  1648,   nil,   nil,   nil,   364,   365,   nil,   369,
+   370,   371,   nil,   nil,   nil,   nil,   393,   nil,   nil,   nil,
+   100,   nil,   159,   nil,   nil,   nil,   nil,   nil,   376,   401,
+   nil,   nil,   nil,    94,   412,   nil,   nil,   nil,   nil,   nil,
+  1547,   nil,   nil,   nil,   nil,   416,    42,   420,   nil,  1689,
+   nil,  1670,   nil,   nil,   nil,  1629,   nil,  1525,   nil,   nil,
+   nil ]
 
 racc_action_default = [
-  -193,  -230,   -50,    -9,  -230,   -22,   -10,  -230,   -11,  -184,
-  -185,   -12,  -230,  -182,   -13,    -1,  -230,   -14,    -2,  -230,
-   -15,    -3,  -183,   -16,    -5,  -230,  -230,   -17,    -6,  -230,
-   -18,    -7,  -230,  -230,  -230,    -8,  -193,  -185,  -183,   -51,
-   -85,   -92,  -230,  -230,  -230,  -193,  -230,    -4,  -193,  -190,
-  -186,  -188,  -189,  -218,  -192,  -191,  -193,  -230,   -85,   -53,
-  -193,   -43,   -33,  -210,  -117,   -31,  -230,  -230,  -230,   -44,
-   -32,   -74,   -36,   -37,  -230,  -230,  -122,   -38,  -169,   -73,
-   -39,   -72,   -40,   -41,  -228,  -171,  -170,   -42,  -230,  -111,
-  -130,  -112,  -230,  -104,  -230,  -108,  -230,  -110,  -105,  -114,
-  -106,  -230,  -113,  -109,  -230,  -107,  -103,  -230,   -49,  -230,
-   -26,  -230,   -27,   -24,   -25,  -172,  -173,  -175,  -230,  -230,
-  -194,  -195,  -230,   -86,   -81,   -70,   -76,   -74,  -216,   -79,
-   -68,   -77,  -230,  -168,   -73,  -167,   -80,   -78,   -75,   -90,
-   -91,   -93,  -230,  -216,   -82,   -84,  -230,  -193,   379,  -230,
-  -230,  -230,  -204,   -57,  -210,  -193,   -59,  -230,   -66,   -65,
-   -56,   -73,  -230,   -95,  -230,  -216,  -230,   -92,  -230,  -230,
-  -230,   -30,  -230,  -118,  -230,  -230,  -230,  -230,  -139,  -230,
-  -146,  -230,  -213,  -225,  -230,  -222,  -221,  -226,  -230,  -230,
-  -230,  -230,  -230,  -230,  -230,  -230,  -230,  -230,  -230,  -230,
-  -230,  -230,  -230,  -230,  -230,  -230,  -230,   -22,  -183,   -21,
-   -23,   -20,  -230,   -83,   -19,  -203,  -230,  -230,  -198,  -201,
-  -230,  -230,   -71,  -217,  -230,   -85,  -230,  -230,  -217,  -230,
-  -227,  -230,  -206,  -230,  -187,  -230,  -205,  -230,  -230,  -230,
-  -230,   -54,   -62,   -61,  -214,  -215,  -230,  -124,  -230,  -216,
-   -55,   -35,   -34,  -230,   -28,  -230,  -163,  -157,  -166,  -158,
-  -164,   -73,  -230,  -165,  -230,  -120,  -119,  -123,  -230,  -116,
-  -230,  -149,  -215,  -211,  -230,  -219,  -230,  -134,  -136,  -135,
-  -137,  -141,  -138,  -143,  -148,  -145,  -142,  -131,  -147,  -144,
-  -140,  -132,  -230,  -127,  -133,  -230,  -151,  -230,  -155,  -174,
-  -230,  -196,  -230,  -197,  -230,  -230,  -177,   -45,   -69,   -87,
-   -46,  -216,   -88,   -89,   -94,   -48,  -208,  -207,  -209,  -230,
-  -230,  -181,   -60,   -98,   -63,  -102,   -99,  -100,  -101,   -97,
-   -64,   -58,   -96,   -47,  -230,   -29,  -230,  -160,  -216,  -121,
-  -115,  -229,  -212,  -223,  -220,  -224,  -127,  -230,  -126,  -152,
-  -150,  -230,  -230,  -202,  -199,  -200,  -176,   -67,  -230,  -179,
-  -180,   -52,  -162,  -215,  -230,  -230,  -125,  -230,  -156,  -230,
-  -178,  -161,  -159,  -230,  -129,  -230,  -154,  -128,  -153 ]
+  -194,  -231,  -231,   -50,  -231,    -8,    -9,  -231,  -231,   -22,
+   -10,  -185,  -186,   -11,  -183,   -12,  -231,  -231,   -13,    -1,
+   -14,    -2,  -231,  -184,   -15,    -3,  -231,   -16,    -5,  -231,
+  -231,   -17,    -6,  -231,   -18,    -7,  -194,  -186,  -184,  -231,
+   -51,   -26,   -27,  -231,   -24,   -25,  -231,  -231,  -231,   -85,
+   -92,  -194,  -231,  -193,  -194,  -191,  -187,  -189,  -190,  -219,
+  -192,    -4,  -194,  -231,   -85,  -194,   -53,  -229,  -172,   -42,
+   -43,  -211,  -117,   -33,  -231,  -231,   -44,   -31,  -231,   -74,
+   -32,   -36,  -231,  -122,   -37,  -231,   -73,   -38,  -170,   -72,
+   -39,   -40,  -171,   -41,  -231,  -103,  -111,  -231,  -130,  -112,
+  -231,  -104,  -231,  -108,  -110,  -105,  -231,  -114,  -106,  -113,
+  -109,  -231,  -107,  -231,  -231,   -49,  -173,  -174,  -176,  -231,
+  -195,  -196,  -231,   -83,   -19,   -22,  -184,   -21,   -23,   -82,
+   -84,  -231,   -75,   -86,   -81,   -70,   -74,   -76,  -217,   -79,
+   -68,   -77,   -73,  -231,  -169,  -168,   -80,   -78,   -90,   -91,
+   -93,  -231,  -217,  -194,   381,  -231,  -231,  -231,  -205,  -231,
+   -57,  -211,  -194,   -59,  -231,   -66,   -65,   -56,   -73,   -95,
+  -231,  -217,  -231,  -231,   -92,  -231,   -30,  -231,  -118,  -231,
+  -231,  -231,  -231,  -231,  -140,  -231,  -147,  -231,  -214,  -227,
+  -231,  -226,  -222,  -231,  -223,  -231,  -231,  -231,  -231,  -231,
+  -231,  -231,  -231,  -231,  -231,  -231,  -231,  -231,  -231,  -231,
+  -231,  -231,  -231,  -231,  -231,   -20,  -204,  -231,  -231,  -202,
+  -199,  -231,  -228,  -231,   -71,  -218,  -231,  -231,   -85,  -231,
+  -218,  -231,  -231,  -231,  -207,  -188,  -231,  -206,  -231,   -54,
+   -62,   -61,  -231,  -231,  -231,  -215,  -216,  -231,  -124,  -231,
+   -55,  -217,  -231,  -231,   -28,  -231,  -120,  -119,   -35,   -34,
+  -166,  -231,  -164,  -158,  -167,  -159,  -165,   -73,  -231,  -123,
+  -116,  -231,  -150,  -216,  -212,  -231,  -231,  -220,  -135,  -137,
+  -136,  -131,  -138,  -142,  -139,  -144,  -149,  -146,  -143,  -132,
+  -148,  -145,  -141,  -133,  -231,  -127,  -134,  -231,  -152,  -231,
+  -156,  -175,  -231,  -197,  -231,  -198,  -231,  -231,  -178,   -45,
+   -69,   -87,   -46,   -88,  -217,   -89,   -94,   -48,  -231,  -209,
+  -208,  -210,  -231,  -182,   -58,   -60,   -97,   -98,   -63,  -102,
+   -99,  -100,  -101,   -64,   -96,   -47,  -231,  -230,   -29,  -121,
+  -231,  -161,  -217,  -115,  -213,  -225,  -221,  -224,  -127,  -231,
+  -126,  -153,  -151,  -231,  -231,  -203,  -200,  -201,  -177,   -67,
+  -231,  -180,  -181,   -52,  -163,  -216,  -231,  -231,  -125,  -231,
+  -157,  -231,  -179,  -162,  -160,  -231,  -129,  -231,  -155,  -128,
+  -154 ]
 
 racc_goto_table = [
-    33,    87,   173,     5,    47,   259,   218,    36,   185,   139,
-    15,    65,    54,    18,   109,    33,    45,    50,     5,   138,
-   128,    61,    19,   255,   108,    62,   143,   162,   130,   146,
-   296,   168,   252,   164,   136,   348,   111,    19,   165,   124,
-   119,   122,   163,   295,   116,    87,    83,   364,   107,   121,
-   147,   175,   324,   330,   210,   170,   224,   298,   121,    82,
-   163,   152,   210,   266,   137,    61,   211,   257,   314,    62,
-   338,   229,   181,   125,   214,   117,   221,   135,   233,    48,
-   187,   163,   150,    59,   236,   216,    72,   217,   366,   331,
-    83,   317,   184,   248,    12,   337,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,    82,   126,   nil,   nil,   nil,   nil,   209,
-   nil,   nil,   nil,   255,   207,   nil,   252,   209,   nil,   349,
-   158,   nil,   207,   nil,   158,   nil,   237,   nil,   nil,   nil,
-    72,   nil,   nil,    19,   nil,   139,   nil,   nil,   nil,   nil,
-   nil,    19,   nil,   nil,   nil,    54,   298,    54,    87,   nil,
-   234,   263,   249,   nil,   nil,    87,   nil,   nil,   nil,   nil,
-   232,   nil,   270,   nil,   nil,   268,   nil,   nil,    61,   nil,
-   nil,   nil,   251,   nil,   nil,    61,   nil,   334,   nil,    62,
-   nil,   343,   nil,   nil,   nil,   263,   nil,   nil,   354,   nil,
-    78,   309,   nil,    83,   nil,   287,   139,   371,   339,   291,
-    83,   138,   368,   nil,    33,   311,    82,     5,    78,   135,
-   308,   312,   313,    82,   292,   255,   136,   329,   329,   158,
-    33,   124,   nil,     5,   299,   nil,    19,   nil,   nil,   nil,
-   305,   332,    87,    72,    78,    33,   256,   316,     5,   357,
-    72,   263,    19,   135,   nil,   320,   137,   nil,   nil,    77,
-   nil,   nil,    61,   187,   nil,   nil,   251,    19,   nil,   135,
-   nil,   345,   328,   328,   nil,   nil,   365,   131,   nil,    80,
-   256,   nil,   nil,   nil,   263,   135,   135,    83,   nil,   nil,
-   nil,    47,   nil,   nil,   nil,   353,   126,   133,   nil,   355,
-    82,   nil,    33,    77,    47,     5,   nil,   nil,   nil,   135,
-   nil,   nil,   323,   323,   158,    33,   nil,   nil,     5,    47,
-   nil,   nil,   nil,    80,    19,   nil,   nil,    72,   nil,    33,
-    33,   362,     5,     5,   nil,   nil,   256,    19,   nil,   358,
-   263,   nil,   135,   nil,   nil,   nil,   nil,    78,   nil,   nil,
-    78,    19,    19,   263,    78,   nil,   nil,    47,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    33,   256,
-   nil,     5,    47,   nil,    47,   nil,    73,    33,   nil,    33,
-     5,   nil,     5,    33,    78,    33,     5,   373,     5,   375,
-    19,   nil,   nil,   nil,   129,   nil,   nil,   nil,   135,    19,
-    78,    19,   nil,   nil,   nil,    19,    77,    19,   nil,   260,
-   159,   135,   nil,    77,   159,   nil,    78,    78,   nil,   nil,
-    73,   nil,   nil,   nil,   nil,   256,    80,   nil,   nil,   133,
-   nil,    78,   nil,    80,   nil,   nil,   nil,   nil,   256,   nil,
-    78,   nil,   nil,   260,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   131,
-   nil,   nil,   nil,   133,   104,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,    78,   nil,   326,   326,   nil,   nil,   133,
-   nil,   144,   145,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-    77,   nil,   nil,   nil,   nil,   327,   327,   nil,   nil,   260,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   159,
-    80,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   133,
-   nil,   nil,   nil,    73,   nil,   nil,   258,   178,   nil,    78,
-    73,   179,   260,   180,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    78,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   133,   nil,   nil,   nil,   nil,   213,   nil,   nil,
-   258,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   129,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   260,   nil,
-   nil,   nil,   325,   325,   159,   nil,   nil,   nil,   nil,   nil,
-   nil,   260,   nil,   nil,   nil,   nil,   nil,    73,   133,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   258,   nil,   nil,   nil,
-   nil,   133,   nil,   nil,   nil,   nil,   nil,   nil,   277,   278,
-   279,   280,   281,   282,   283,   284,   285,   286,   nil,   288,
-   289,   290,   nil,   nil,   294,   nil,   nil,   nil,   nil,   258,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+     2,     9,   261,    53,   226,    69,    36,   220,    61,   265,
+   148,    77,   194,    19,   146,    70,   117,    51,   231,     2,
+     9,    22,   178,   140,    73,    21,    93,   152,    56,   159,
+   138,   132,   173,   124,   300,   115,   128,   249,   259,   298,
+    22,   134,   350,    91,   125,   171,   170,   297,   127,   366,
+    43,   114,   147,   122,   328,   333,    69,   257,   263,   316,
+   342,   121,   177,   135,    22,   182,    70,   118,   153,   145,
+   223,    81,   232,    54,   156,    73,   121,    93,    66,   158,
+   119,   237,   217,   218,   324,   187,   320,   193,   189,   261,
+    16,   nil,   nil,   nil,    91,   368,   341,   137,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   215,
+   165,   259,   128,   165,   nil,   nil,   nil,   336,   300,   nil,
+   125,   nil,    81,   351,   127,   nil,   nil,   nil,   nil,   242,
+   nil,   nil,   nil,   nil,   148,   nil,   nil,   nil,   nil,   nil,
+    22,    53,   nil,    53,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   251,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,    69,   260,   nil,    69,   235,    88,   nil,   nil,
+   nil,   271,    70,   nil,   370,    70,   nil,   nil,   234,   nil,
+   359,   258,   347,    93,    73,   311,    93,   261,   nil,   146,
+   148,   356,   289,    88,   373,   260,   293,   301,   310,   nil,
+    91,   145,   339,    91,   nil,   nil,   132,   nil,   367,   314,
+   165,     2,     9,   nil,   nil,   nil,   134,   nil,    88,   nil,
+   nil,     2,     9,   nil,   294,   326,   326,   147,    81,   262,
+   nil,    81,    22,   145,   307,    69,     2,     9,   319,   nil,
+   nil,   nil,    22,   nil,   145,    70,   332,   332,    87,   322,
+   260,   nil,   nil,   nil,   258,   nil,    93,    22,   189,   nil,
+   nil,   262,   nil,   145,   145,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   137,    91,   141,   nil,   nil,   nil,   nil,   260,
+   nil,   nil,   nil,    61,   111,   nil,   165,    84,   145,   nil,
+   nil,   327,   327,   nil,     2,     9,    61,   123,   nil,    87,
+   nil,    81,   nil,   nil,   129,   130,   nil,     2,     9,   nil,
+   nil,    61,   nil,   139,    90,    22,   262,   145,     2,     9,
+   nil,   nil,     2,     9,    88,    88,   166,    88,    22,   166,
+   nil,   360,   nil,   nil,   nil,   260,   nil,   nil,    84,    22,
+   144,   nil,   nil,    22,   nil,   262,   nil,   nil,   260,    61,
+   nil,   nil,   184,   nil,   nil,   185,   nil,    88,   186,   nil,
+     2,     9,   nil,   nil,    61,    90,    61,   nil,    88,     2,
+     9,     2,     9,   145,   nil,     2,     9,     2,     9,   nil,
+   nil,    22,   375,   113,   377,   nil,   145,    88,    88,   nil,
+    22,   nil,    22,   nil,   nil,   nil,    22,    88,    22,   nil,
+   nil,   262,   131,   nil,   nil,    87,   266,   nil,    87,   nil,
+   nil,   nil,    88,   nil,   262,   nil,   nil,   169,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   166,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   169,   nil,   266,   nil,
+   nil,    88,   nil,   nil,    84,   264,   nil,    84,   nil,   141,
+   nil,   nil,   nil,   278,   279,   280,   169,   282,   283,   284,
+   285,   286,   287,   288,   nil,   290,   291,   292,   330,   330,
+   296,    90,   144,   nil,    90,   nil,   nil,   264,    87,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   139,   nil,
+   nil,   nil,   nil,   266,   nil,   nil,   nil,    88,   nil,   nil,
+   nil,   nil,   166,   nil,   144,   nil,   nil,   329,   329,   nil,
+    88,   nil,   nil,   nil,   nil,   144,   nil,    84,   nil,   nil,
+   nil,   nil,   266,   nil,   nil,   nil,   nil,   nil,   nil,   252,
+   nil,   nil,   264,   nil,   331,   331,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,    90,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   281,   nil,   nil,   nil,   nil,   nil,   nil,   144,
+   nil,   264,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   266,   nil,
+   nil,   313,   nil,   315,   nil,   nil,   nil,   nil,   144,   nil,
+   nil,   266,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   334,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   264,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   345,
+   264,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   144,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   355,   144,   nil,   nil,
+   357,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   258,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   258 ]
+   nil,   nil,   nil,   nil,   364 ]
 
 racc_goto_check = [
-    52,    30,    60,    21,     4,    69,    81,    32,    84,    53,
-     2,    22,    63,     3,    54,    52,    32,    77,    21,    30,
-    35,    31,    37,    67,     5,    21,    38,    41,    47,    54,
-    65,    41,    23,    57,    50,    62,    20,    37,    35,    31,
-    20,    73,    54,    64,    71,    30,    29,    58,    37,     3,
-    73,    57,    46,    46,     7,    22,    36,    67,     3,    28,
-    54,     3,     7,    61,    29,    31,    19,    68,    56,    21,
-    70,    36,    57,    33,    19,    72,    34,    28,    74,    75,
-    30,    54,    76,    40,    78,    79,    24,    80,    62,    42,
-    29,    82,    83,    36,     1,    69,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,    28,    24,   nil,   nil,   nil,   nil,     5,
-   nil,   nil,   nil,    67,    21,   nil,    23,     5,   nil,    65,
-    24,   nil,    21,   nil,    24,   nil,    41,   nil,   nil,   nil,
-    24,   nil,   nil,    37,   nil,    53,   nil,   nil,   nil,   nil,
-   nil,    37,   nil,   nil,   nil,    63,    67,    63,    30,   nil,
-    77,    30,    38,   nil,   nil,    30,   nil,   nil,   nil,   nil,
-     3,   nil,    54,   nil,   nil,    22,   nil,   nil,    31,   nil,
-   nil,   nil,    21,   nil,   nil,    31,   nil,    36,   nil,    21,
-   nil,    84,   nil,   nil,   nil,    30,   nil,   nil,    81,   nil,
-    49,    53,   nil,    29,   nil,    63,    53,    69,    60,    63,
-    29,    30,    67,   nil,    52,    35,    28,    21,    49,    28,
-    47,    54,    54,    28,     2,    67,    50,    30,    30,    24,
-    52,    31,   nil,    21,    71,   nil,    37,   nil,   nil,   nil,
-     2,    54,    30,    24,    49,    52,    24,    32,    21,    36,
-    24,    30,    37,    28,   nil,     2,    29,   nil,   nil,    26,
-   nil,   nil,    31,    30,   nil,   nil,    21,    37,   nil,    28,
-   nil,    54,    29,    29,   nil,   nil,    36,    26,   nil,    27,
-    24,   nil,   nil,   nil,    30,    28,    28,    29,   nil,   nil,
-   nil,     4,   nil,   nil,   nil,    54,    24,    27,   nil,    54,
-    28,   nil,    52,    26,     4,    21,   nil,   nil,   nil,    28,
-   nil,   nil,    24,    24,    24,    52,   nil,   nil,    21,     4,
-   nil,   nil,   nil,    27,    37,   nil,   nil,    24,   nil,    52,
-    52,    54,    21,    21,   nil,   nil,    24,    37,   nil,     2,
-    30,   nil,    28,   nil,   nil,   nil,   nil,    49,   nil,   nil,
-    49,    37,    37,    30,    49,   nil,   nil,     4,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    52,    24,
-   nil,    21,     4,   nil,     4,   nil,    25,    52,   nil,    52,
-    21,   nil,    21,    52,    49,    52,    21,     2,    21,     2,
-    37,   nil,   nil,   nil,    25,   nil,   nil,   nil,    28,    37,
-    49,    37,   nil,   nil,   nil,    37,    26,    37,   nil,    26,
-    25,    28,   nil,    26,    25,   nil,    49,    49,   nil,   nil,
-    25,   nil,   nil,   nil,   nil,    24,    27,   nil,   nil,    27,
-   nil,    49,   nil,    27,   nil,   nil,   nil,   nil,    24,   nil,
-    49,   nil,   nil,    26,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    26,
-   nil,   nil,   nil,    27,    51,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,    49,   nil,    26,    26,   nil,   nil,    27,
-   nil,    51,    51,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-    26,   nil,   nil,   nil,   nil,    27,    27,   nil,   nil,    26,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    25,
-    27,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    27,
-   nil,   nil,   nil,    25,   nil,   nil,    25,    51,   nil,    49,
-    25,    51,    26,    51,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    49,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    27,   nil,   nil,   nil,   nil,    51,   nil,   nil,
-    25,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+    52,    21,    67,    63,    36,    30,    32,    81,     4,    69,
+    53,    22,    84,     2,    50,    31,    71,    32,    36,    52,
+    21,    37,    60,    47,    21,     3,    29,    38,    77,    41,
+    35,    30,    41,    19,    67,     5,     7,    36,    23,    65,
+    37,    31,    62,    28,    21,    35,    57,    64,     5,    58,
+    20,    37,    29,    73,    46,    46,    30,    61,    68,    56,
+    70,     3,    22,    33,    37,    57,    31,    72,    73,    28,
+    34,    24,    74,    75,    76,    21,     3,    29,    40,     3,
+    20,    78,    79,    80,    42,    57,    82,    83,    30,    67,
+     1,   nil,   nil,   nil,    28,    62,    69,    24,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    19,
+    24,    23,     7,    24,   nil,   nil,   nil,    36,    67,   nil,
+    21,   nil,    24,    65,     5,   nil,   nil,   nil,   nil,    41,
+   nil,   nil,   nil,   nil,    53,   nil,   nil,   nil,   nil,   nil,
+    37,    63,   nil,    63,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,    38,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,    30,    30,   nil,    30,    77,    49,   nil,   nil,
+   nil,    22,    31,   nil,    67,    31,   nil,   nil,     3,   nil,
+    36,    21,    84,    29,    21,    53,    29,    67,   nil,    50,
+    53,    81,    63,    49,    69,    30,    63,    71,    47,   nil,
+    28,    28,    60,    28,   nil,   nil,    30,   nil,    36,    35,
+    24,    52,    21,   nil,   nil,   nil,    31,   nil,    49,   nil,
+   nil,    52,    21,   nil,     2,    30,    30,    29,    24,    24,
+   nil,    24,    37,    28,     2,    30,    52,    21,    32,   nil,
+   nil,   nil,    37,   nil,    28,    31,    29,    29,    26,     2,
+    30,   nil,   nil,   nil,    21,   nil,    29,    37,    30,   nil,
+   nil,    24,   nil,    28,    28,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,    24,    28,    26,   nil,   nil,   nil,   nil,    30,
+   nil,   nil,   nil,     4,    51,   nil,    24,    25,    28,   nil,
+   nil,    24,    24,   nil,    52,    21,     4,    51,   nil,    26,
+   nil,    24,   nil,   nil,    51,    51,   nil,    52,    21,   nil,
+   nil,     4,   nil,    25,    27,    37,    24,    28,    52,    21,
+   nil,   nil,    52,    21,    49,    49,    25,    49,    37,    25,
+   nil,     2,   nil,   nil,   nil,    30,   nil,   nil,    25,    37,
+    27,   nil,   nil,    37,   nil,    24,   nil,   nil,    30,     4,
+   nil,   nil,    51,   nil,   nil,    51,   nil,    49,    51,   nil,
+    52,    21,   nil,   nil,     4,    27,     4,   nil,    49,    52,
+    21,    52,    21,    28,   nil,    52,    21,    52,    21,   nil,
+   nil,    37,     2,    54,     2,   nil,    28,    49,    49,   nil,
+    37,   nil,    37,   nil,   nil,   nil,    37,    49,    37,   nil,
+   nil,    24,    54,   nil,   nil,    26,    26,   nil,    26,   nil,
+   nil,   nil,    49,   nil,    24,   nil,   nil,    54,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,    25,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,    54,   nil,    26,   nil,
+   nil,    49,   nil,   nil,    25,    25,   nil,    25,   nil,    26,
+   nil,   nil,   nil,    51,    51,    51,    54,    51,    51,    51,
+    51,    51,    51,    51,   nil,    51,    51,    51,    26,    26,
+    51,    27,    27,   nil,    27,   nil,   nil,    25,    26,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    25,   nil,
+   nil,   nil,   nil,    26,   nil,   nil,   nil,    49,   nil,   nil,
+   nil,   nil,    25,   nil,    27,   nil,   nil,    25,    25,   nil,
+    49,   nil,   nil,   nil,   nil,    27,   nil,    25,   nil,   nil,
+   nil,   nil,    26,   nil,   nil,   nil,   nil,   nil,   nil,    54,
+   nil,   nil,    25,   nil,    27,    27,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,    27,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,    54,   nil,   nil,   nil,   nil,   nil,   nil,    27,
+   nil,    25,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    26,   nil,
-   nil,   nil,    25,    25,    25,   nil,   nil,   nil,   nil,   nil,
-   nil,    26,   nil,   nil,   nil,   nil,   nil,    25,    27,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,    25,   nil,   nil,   nil,
-   nil,    27,   nil,   nil,   nil,   nil,   nil,   nil,    51,    51,
-    51,    51,    51,    51,    51,    51,    51,    51,   nil,    51,
-    51,    51,   nil,   nil,    51,   nil,   nil,   nil,   nil,    25,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,    54,   nil,    54,   nil,   nil,   nil,   nil,    27,   nil,
+   nil,    26,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,    54,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,    25,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    54,
+    25,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,    27,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,    54,    27,   nil,   nil,
+    54,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,    25,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    25 ]
+   nil,   nil,   nil,   nil,    54 ]
 
 racc_goto_pointer = [
-   nil,    94,    10,    13,   -11,    -2,   nil,   -57,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   -45,
-     6,     3,   -11,  -137,    64,   344,   227,   247,    37,    24,
-   -21,    -1,     6,    33,   -49,   -20,   -72,    22,   -15,   nil,
-    64,   -29,  -151,   nil,   nil,   nil,  -186,   -12,   nil,   168,
-    -6,   429,     0,   -32,   -15,   nil,  -160,   -24,  -291,   nil,
-   -66,  -111,  -258,    -4,  -163,  -176,   nil,  -149,  -105,  -167,
-  -192,    12,    43,     5,   -69,    63,    34,     1,   -67,   -35,
-   -33,  -114,  -140,    -9,   -93,   nil ]
+   nil,    90,    13,    25,   -11,     5,   nil,    -7,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   -10,
+    46,     1,   -12,  -142,    48,   264,   225,   291,    20,     3,
+   -18,    -8,     5,    14,   -65,   -19,  -134,    21,   -23,   nil,
+    56,   -33,  -154,   nil,   nil,   nil,  -189,   -26,   nil,   144,
+   -35,   258,     0,   -40,   354,   nil,  -171,   -17,  -293,   nil,
+   -53,  -122,  -253,   -14,  -166,  -174,   nil,  -179,  -123,  -172,
+  -208,   -17,    34,    17,   -81,    56,    20,    11,   -76,   -38,
+   -37,  -113,  -147,   -19,   -94,   nil ]
 
 racc_goto_default = [
-   nil,   nil,   nil,   160,    21,    24,    28,    31,    35,     3,
-     6,     8,    11,    14,    17,    20,    23,    27,    30,    34,
-   nil,    91,   nil,    70,    93,    95,    98,   100,   102,   105,
-   106,    89,     4,   nil,   nil,   nil,   nil,    74,   nil,    26,
-   nil,   nil,   153,   240,   156,   157,   nil,   nil,   132,    99,
-   103,   174,    84,   123,    90,   140,   141,   nil,   246,    97,
-   nil,   nil,   nil,    85,   nil,   nil,   297,    67,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    51,   nil,
-   nil,   nil,   nil,   nil,   nil,   188 ]
+   nil,   nil,   nil,   167,    25,    28,    32,    35,     5,     6,
+    10,    13,    15,    18,    20,    24,    27,    31,    34,     4,
+   nil,    99,   nil,    80,   101,   103,   105,   108,   109,   112,
+    95,    96,     8,   nil,   nil,   nil,   nil,    85,   nil,    30,
+   nil,   nil,   160,   238,   163,   164,   nil,   nil,   143,   107,
+   110,   179,    67,   133,    98,   149,   150,   nil,   247,   104,
+   nil,   nil,   nil,    68,   nil,   nil,   299,    78,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    57,   nil,
+   nil,   nil,   nil,   nil,   nil,   190 ]
 
 racc_token_table = {
  false => 0,
@@ -947,11 +958,12 @@ racc_token_table = {
  :IN_EDGE => 64,
  :OUT_EDGE => 65,
  :IN_EDGE_SUB => 66,
- :OUT_EDGE_SUB => 67 }
+ :OUT_EDGE_SUB => 67,
+ :IN => 68 }
 
 racc_use_result_var = true
 
-racc_nt_base = 68
+racc_nt_base = 69
 
 Racc_arg = [
  racc_action_table,
@@ -1038,6 +1050,7 @@ Racc_token_to_s_table = [
 'OUT_EDGE',
 'IN_EDGE_SUB',
 'OUT_EDGE_SUB',
+'IN',
 '$start',
 'program',
 'statements',
@@ -1131,7 +1144,7 @@ Racc_debug_parser = false
 
  # reduce 0 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 45
+module_eval <<'.,.,', 'grammar.ra', 46
   def _reduce_1( val, _values, result )
     if val[0]
         # Make sure we always return an array.
@@ -1155,7 +1168,7 @@ module_eval <<'.,.,', 'grammar.ra', 45
 
  # reduce 3 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 61
+module_eval <<'.,.,', 'grammar.ra', 62
   def _reduce_4( val, _values, result )
     if val[0] and val[1]
         if val[0].instance_of?(AST::ASTArray)
@@ -1200,14 +1213,14 @@ module_eval <<'.,.,', 'grammar.ra', 61
 
  # reduce 18 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 81
+module_eval <<'.,.,', 'grammar.ra', 82
   def _reduce_19( val, _values, result )
     result = AST::Relationship.new(val[0], val[2], val[1][:value], ast_context)
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 84
+module_eval <<'.,.,', 'grammar.ra', 85
   def _reduce_20( val, _values, result )
     result = AST::Relationship.new(val[0], val[2], val[1][:value], ast_context)
    result
@@ -1228,7 +1241,7 @@ module_eval <<'.,.,', 'grammar.ra', 84
 
  # reduce 27 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 97
+module_eval <<'.,.,', 'grammar.ra', 98
   def _reduce_28( val, _values, result )
     args = aryfy(val[2])
     result = ast AST::Function,
@@ -1240,7 +1253,7 @@ module_eval <<'.,.,', 'grammar.ra', 97
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 105
+module_eval <<'.,.,', 'grammar.ra', 106
   def _reduce_29( val, _values, result )
     args = aryfy(val[2])
     result = ast AST::Function,
@@ -1252,7 +1265,7 @@ module_eval <<'.,.,', 'grammar.ra', 105
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 111
+module_eval <<'.,.,', 'grammar.ra', 112
   def _reduce_30( val, _values, result )
     result = ast AST::Function,
         :name => val[0][:value],
@@ -1263,7 +1276,7 @@ module_eval <<'.,.,', 'grammar.ra', 111
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 119
+module_eval <<'.,.,', 'grammar.ra', 120
   def _reduce_31( val, _values, result )
     args = aryfy(val[1])
     result = ast AST::Function,
@@ -1279,7 +1292,7 @@ module_eval <<'.,.,', 'grammar.ra', 119
 
  # reduce 33 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 127
+module_eval <<'.,.,', 'grammar.ra', 128
   def _reduce_34( val, _values, result )
     result = aryfy(val[0], val[2])
     result.line = @lexer.line
@@ -1288,7 +1301,7 @@ module_eval <<'.,.,', 'grammar.ra', 127
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 136
+module_eval <<'.,.,', 'grammar.ra', 137
   def _reduce_35( val, _values, result )
     unless val[0].is_a?(AST::ASTArray)
         val[0] = aryfy(val[0])
@@ -1317,14 +1330,14 @@ module_eval <<'.,.,', 'grammar.ra', 136
 
  # reduce 43 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 150
+module_eval <<'.,.,', 'grammar.ra', 151
   def _reduce_44( val, _values, result )
                     result = ast AST::Name, :value => val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 172
+module_eval <<'.,.,', 'grammar.ra', 173
   def _reduce_45( val, _values, result )
     @lexer.commentpop
     array = val[2]
@@ -1349,7 +1362,7 @@ module_eval <<'.,.,', 'grammar.ra', 172
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 175
+module_eval <<'.,.,', 'grammar.ra', 176
   def _reduce_46( val, _values, result )
     # This is a deprecated syntax.
     error "All resource specifications require names"
@@ -1357,7 +1370,7 @@ module_eval <<'.,.,', 'grammar.ra', 175
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 179
+module_eval <<'.,.,', 'grammar.ra', 180
   def _reduce_47( val, _values, result )
     # a defaults setting for a type
     @lexer.commentpop
@@ -1366,7 +1379,7 @@ module_eval <<'.,.,', 'grammar.ra', 179
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 185
+module_eval <<'.,.,', 'grammar.ra', 186
   def _reduce_48( val, _values, result )
     @lexer.commentpop
     result = ast AST::ResourceOverride, :object => val[0], :parameters => val[2]
@@ -1374,7 +1387,7 @@ module_eval <<'.,.,', 'grammar.ra', 185
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 212
+module_eval <<'.,.,', 'grammar.ra', 213
   def _reduce_49( val, _values, result )
     type = val[0]
 
@@ -1402,21 +1415,21 @@ module_eval <<'.,.,', 'grammar.ra', 212
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 213
+module_eval <<'.,.,', 'grammar.ra', 214
   def _reduce_50( val, _values, result )
  result = :virtual
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 214
+module_eval <<'.,.,', 'grammar.ra', 215
   def _reduce_51( val, _values, result )
  result = :exported
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 239
+module_eval <<'.,.,', 'grammar.ra', 240
   def _reduce_52( val, _values, result )
     @lexer.commentpop
     if val[0] =~ /^[a-z]/
@@ -1441,7 +1454,7 @@ module_eval <<'.,.,', 'grammar.ra', 239
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 258
+module_eval <<'.,.,', 'grammar.ra', 259
   def _reduce_53( val, _values, result )
     if val[0] =~ /^[a-z]/
         Puppet.warning addcontext("Collection names must now be capitalized")
@@ -1464,7 +1477,7 @@ module_eval <<'.,.,', 'grammar.ra', 258
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 268
+module_eval <<'.,.,', 'grammar.ra', 269
   def _reduce_54( val, _values, result )
     if val[1]
         result = val[1]
@@ -1476,7 +1489,7 @@ module_eval <<'.,.,', 'grammar.ra', 268
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 276
+module_eval <<'.,.,', 'grammar.ra', 277
   def _reduce_55( val, _values, result )
     if val[1]
         result = val[1]
@@ -1492,7 +1505,7 @@ module_eval <<'.,.,', 'grammar.ra', 276
 
  # reduce 57 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 284
+module_eval <<'.,.,', 'grammar.ra', 285
   def _reduce_58( val, _values, result )
     result = ast AST::CollExpr, :test1 => val[0], :oper => val[1], :test2 => val[2]
    result
@@ -1501,7 +1514,7 @@ module_eval <<'.,.,', 'grammar.ra', 284
 
  # reduce 59 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 290
+module_eval <<'.,.,', 'grammar.ra', 291
   def _reduce_60( val, _values, result )
     result = val[1]
     result.parens = true
@@ -1509,21 +1522,21 @@ module_eval <<'.,.,', 'grammar.ra', 290
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 291
+module_eval <<'.,.,', 'grammar.ra', 292
   def _reduce_61( val, _values, result )
  result=val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 292
+module_eval <<'.,.,', 'grammar.ra', 293
   def _reduce_62( val, _values, result )
  result=val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 299
+module_eval <<'.,.,', 'grammar.ra', 300
   def _reduce_63( val, _values, result )
     result = ast AST::CollExpr, :test1 => val[0], :oper => val[1][:value], :test2 => val[2]
     #result = ast AST::CollExpr
@@ -1532,7 +1545,7 @@ module_eval <<'.,.,', 'grammar.ra', 299
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 304
+module_eval <<'.,.,', 'grammar.ra', 305
   def _reduce_64( val, _values, result )
     result = ast AST::CollExpr, :test1 => val[0], :oper => val[1][:value], :test2 => val[2]
     #result = ast AST::CollExpr
@@ -1545,7 +1558,7 @@ module_eval <<'.,.,', 'grammar.ra', 304
 
  # reduce 66 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 311
+module_eval <<'.,.,', 'grammar.ra', 312
   def _reduce_67( val, _values, result )
     result = ast AST::ResourceInstance, :children => [val[0],val[2]]
    result
@@ -1554,7 +1567,7 @@ module_eval <<'.,.,', 'grammar.ra', 311
 
  # reduce 68 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 321
+module_eval <<'.,.,', 'grammar.ra', 322
   def _reduce_69( val, _values, result )
     if val[0].instance_of?(AST::ResourceInstance)
         result = ast AST::ASTArray, :children => [val[0],val[2]]
@@ -1570,21 +1583,21 @@ module_eval <<'.,.,', 'grammar.ra', 321
 
  # reduce 71 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 328
+module_eval <<'.,.,', 'grammar.ra', 329
   def _reduce_72( val, _values, result )
     result = ast AST::Undef, :value => :undef
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 332
+module_eval <<'.,.,', 'grammar.ra', 333
   def _reduce_73( val, _values, result )
     result = ast AST::Name, :value => val[0][:value], :line => val[0][:line]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 336
+module_eval <<'.,.,', 'grammar.ra', 337
   def _reduce_74( val, _values, result )
     result = ast AST::Type, :value => val[0][:value], :line => val[0][:line]
    result
@@ -1605,7 +1618,7 @@ module_eval <<'.,.,', 'grammar.ra', 336
 
  # reduce 81 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 353
+module_eval <<'.,.,', 'grammar.ra', 354
   def _reduce_82( val, _values, result )
     if val[0][:value] =~ /::/
         raise Puppet::ParseError, "Cannot assign to variables in other namespaces"
@@ -1617,14 +1630,14 @@ module_eval <<'.,.,', 'grammar.ra', 353
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 356
+module_eval <<'.,.,', 'grammar.ra', 357
   def _reduce_83( val, _values, result )
     result = ast AST::VarDef, :name => val[0], :value => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 361
+module_eval <<'.,.,', 'grammar.ra', 362
   def _reduce_84( val, _values, result )
     variable = ast AST::Name, :value => val[0][:value], :line => val[0][:line]
     result = ast AST::VarDef, :name => variable, :value => val[2], :append => true, :line => val[0][:line]
@@ -1632,21 +1645,21 @@ module_eval <<'.,.,', 'grammar.ra', 361
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 366
+module_eval <<'.,.,', 'grammar.ra', 367
   def _reduce_85( val, _values, result )
     result = ast AST::ASTArray
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 366
+module_eval <<'.,.,', 'grammar.ra', 367
   def _reduce_86( val, _values, result )
  result = val[0]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 375
+module_eval <<'.,.,', 'grammar.ra', 376
   def _reduce_87( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         val[0].push(val[2])
@@ -1658,14 +1671,14 @@ module_eval <<'.,.,', 'grammar.ra', 375
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 379
+module_eval <<'.,.,', 'grammar.ra', 380
   def _reduce_88( val, _values, result )
     result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 384
+module_eval <<'.,.,', 'grammar.ra', 385
   def _reduce_89( val, _values, result )
     result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2],
                                      :add => true
@@ -1677,21 +1690,21 @@ module_eval <<'.,.,', 'grammar.ra', 384
 
  # reduce 91 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 392
+module_eval <<'.,.,', 'grammar.ra', 393
   def _reduce_92( val, _values, result )
     result = ast AST::ASTArray
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 392
+module_eval <<'.,.,', 'grammar.ra', 393
   def _reduce_93( val, _values, result )
  result = val[0]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 401
+module_eval <<'.,.,', 'grammar.ra', 402
   def _reduce_94( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         val[0].push(val[2])
@@ -1705,7 +1718,7 @@ module_eval <<'.,.,', 'grammar.ra', 401
 
  # reduce 95 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 410
+module_eval <<'.,.,', 'grammar.ra', 411
   def _reduce_96( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         result = val[0].push(val[2])
@@ -1752,7 +1765,7 @@ module_eval <<'.,.,', 'grammar.ra', 410
 
  # reduce 114 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 439
+module_eval <<'.,.,', 'grammar.ra', 440
   def _reduce_115( val, _values, result )
     args = aryfy(val[2])
     result = ast AST::Function,
@@ -1763,7 +1776,7 @@ module_eval <<'.,.,', 'grammar.ra', 439
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 444
+module_eval <<'.,.,', 'grammar.ra', 445
   def _reduce_116( val, _values, result )
     result = ast AST::Function,
         :name => val[0][:value], :line => val[0][:line],
@@ -1773,49 +1786,49 @@ module_eval <<'.,.,', 'grammar.ra', 444
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 445
+module_eval <<'.,.,', 'grammar.ra', 446
   def _reduce_117( val, _values, result )
  result = ast AST::String, :value => val[0][:value],                  :line => val[0][:line]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 446
+module_eval <<'.,.,', 'grammar.ra', 447
   def _reduce_118( val, _values, result )
  result = ast AST::Concat, :value => [ast(AST::String,val[0])]+val[1], :line => val[0][:line]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 448
+module_eval <<'.,.,', 'grammar.ra', 449
   def _reduce_119( val, _values, result )
  result = [val[0]] + val[1]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 450
+module_eval <<'.,.,', 'grammar.ra', 451
   def _reduce_120( val, _values, result )
  result = [ast(AST::String,val[0])]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 451
+module_eval <<'.,.,', 'grammar.ra', 452
   def _reduce_121( val, _values, result )
  result = [ast(AST::String,val[0])] + val[1]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 456
+module_eval <<'.,.,', 'grammar.ra', 457
   def _reduce_122( val, _values, result )
     result = ast AST::Boolean, :value => val[0][:value], :line => val[0][:line]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 461
+module_eval <<'.,.,', 'grammar.ra', 462
   def _reduce_123( val, _values, result )
     Puppet.warning addcontext("Deprecation notice:  Resource references should now be capitalized")
     result = ast AST::ResourceReference, :type => val[0][:value], :line => val[0][:line], :title => val[2]
@@ -1823,14 +1836,14 @@ module_eval <<'.,.,', 'grammar.ra', 461
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 463
+module_eval <<'.,.,', 'grammar.ra', 464
   def _reduce_124( val, _values, result )
     result = ast AST::ResourceReference, :type => val[0], :title => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 477
+module_eval <<'.,.,', 'grammar.ra', 478
   def _reduce_125( val, _values, result )
     @lexer.commentpop
     args = {
@@ -1847,7 +1860,7 @@ module_eval <<'.,.,', 'grammar.ra', 477
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 490
+module_eval <<'.,.,', 'grammar.ra', 491
   def _reduce_126( val, _values, result )
     @lexer.commentpop
     args = {
@@ -1866,7 +1879,7 @@ module_eval <<'.,.,', 'grammar.ra', 490
 
  # reduce 127 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 496
+module_eval <<'.,.,', 'grammar.ra', 497
   def _reduce_128( val, _values, result )
     @lexer.commentpop
     result = ast AST::Else, :statements => val[2]
@@ -1874,7 +1887,7 @@ module_eval <<'.,.,', 'grammar.ra', 496
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 500
+module_eval <<'.,.,', 'grammar.ra', 501
   def _reduce_129( val, _values, result )
     @lexer.commentpop
     result = ast AST::Else, :statements => ast(AST::Nop)
@@ -1884,141 +1897,148 @@ module_eval <<'.,.,', 'grammar.ra', 500
 
  # reduce 130 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 517
+module_eval <<'.,.,', 'grammar.ra', 518
   def _reduce_131( val, _values, result )
-    result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
+    result = ast AST::InOperator, :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 520
+module_eval <<'.,.,', 'grammar.ra', 521
   def _reduce_132( val, _values, result )
     result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 523
+module_eval <<'.,.,', 'grammar.ra', 524
   def _reduce_133( val, _values, result )
-    result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
+    result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 526
+module_eval <<'.,.,', 'grammar.ra', 527
   def _reduce_134( val, _values, result )
     result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 529
+module_eval <<'.,.,', 'grammar.ra', 530
   def _reduce_135( val, _values, result )
     result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 532
+module_eval <<'.,.,', 'grammar.ra', 533
   def _reduce_136( val, _values, result )
     result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 535
+module_eval <<'.,.,', 'grammar.ra', 536
   def _reduce_137( val, _values, result )
     result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 538
+module_eval <<'.,.,', 'grammar.ra', 539
   def _reduce_138( val, _values, result )
     result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 541
+module_eval <<'.,.,', 'grammar.ra', 542
   def _reduce_139( val, _values, result )
-    result = ast AST::Minus, :value => val[1]
+    result = ast AST::ArithmeticOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 544
+module_eval <<'.,.,', 'grammar.ra', 545
   def _reduce_140( val, _values, result )
-    result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
+    result = ast AST::Minus, :value => val[1]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 547
+module_eval <<'.,.,', 'grammar.ra', 548
   def _reduce_141( val, _values, result )
     result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 550
+module_eval <<'.,.,', 'grammar.ra', 551
   def _reduce_142( val, _values, result )
     result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 553
+module_eval <<'.,.,', 'grammar.ra', 554
   def _reduce_143( val, _values, result )
     result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 556
+module_eval <<'.,.,', 'grammar.ra', 557
   def _reduce_144( val, _values, result )
     result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 559
+module_eval <<'.,.,', 'grammar.ra', 560
   def _reduce_145( val, _values, result )
     result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 562
+module_eval <<'.,.,', 'grammar.ra', 563
   def _reduce_146( val, _values, result )
-    result = ast AST::Not, :value => val[1]
+    result = ast AST::ComparisonOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 565
+module_eval <<'.,.,', 'grammar.ra', 566
   def _reduce_147( val, _values, result )
-    result = ast AST::BooleanOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
+    result = ast AST::Not, :value => val[1]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 568
+module_eval <<'.,.,', 'grammar.ra', 569
   def _reduce_148( val, _values, result )
     result = ast AST::BooleanOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 571
+module_eval <<'.,.,', 'grammar.ra', 572
   def _reduce_149( val, _values, result )
-    result = val[1]
+    result = ast AST::BooleanOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 580
+module_eval <<'.,.,', 'grammar.ra', 575
   def _reduce_150( val, _values, result )
+    result = val[1]
+   result
+  end
+.,.,
+
+module_eval <<'.,.,', 'grammar.ra', 584
+  def _reduce_151( val, _values, result )
     @lexer.commentpop
     options = val[3]
     unless options.instance_of?(AST::ASTArray)
@@ -2029,10 +2049,10 @@ module_eval <<'.,.,', 'grammar.ra', 580
   end
 .,.,
 
- # reduce 151 omitted
+ # reduce 152 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 590
-  def _reduce_152( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 594
+  def _reduce_153( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         val[0].push val[1]
         result = val[0]
@@ -2043,16 +2063,16 @@ module_eval <<'.,.,', 'grammar.ra', 590
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 595
-  def _reduce_153( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 599
+  def _reduce_154( val, _values, result )
     @lexer.commentpop
     result = ast AST::CaseOpt, :value => val[0], :statements => val[3]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 601
-  def _reduce_154( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 605
+  def _reduce_155( val, _values, result )
     @lexer.commentpop
     result = ast(AST::CaseOpt,
         :value => val[0],
@@ -2062,10 +2082,10 @@ module_eval <<'.,.,', 'grammar.ra', 601
   end
 .,.,
 
- # reduce 155 omitted
+ # reduce 156 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 611
-  def _reduce_156( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 615
+  def _reduce_157( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         val[0].push(val[2])
         result = val[0]
@@ -2076,27 +2096,27 @@ module_eval <<'.,.,', 'grammar.ra', 611
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 615
-  def _reduce_157( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 619
+  def _reduce_158( val, _values, result )
     result = ast AST::Selector, :param => val[0], :values => val[2]
    result
   end
 .,.,
 
- # reduce 158 omitted
+ # reduce 159 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 621
-  def _reduce_159( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 625
+  def _reduce_160( val, _values, result )
     @lexer.commentpop
     result = val[1]
    result
   end
 .,.,
 
- # reduce 160 omitted
+ # reduce 161 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 631
-  def _reduce_161( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 635
+  def _reduce_162( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         val[0].push(val[2])
         result = val[0]
@@ -2107,15 +2127,13 @@ module_eval <<'.,.,', 'grammar.ra', 631
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 635
-  def _reduce_162( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 639
+  def _reduce_163( val, _values, result )
     result = ast AST::ResourceParam, :param => val[0], :value => val[2]
    result
   end
 .,.,
 
- # reduce 163 omitted
-
  # reduce 164 omitted
 
  # reduce 165 omitted
@@ -2128,33 +2146,35 @@ module_eval <<'.,.,', 'grammar.ra', 635
 
  # reduce 169 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 646
-  def _reduce_170( val, _values, result )
+ # reduce 170 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 650
+  def _reduce_171( val, _values, result )
     result = ast AST::Default, :value => val[0][:value], :line => val[0][:line]
    result
   end
 .,.,
 
- # reduce 171 omitted
+ # reduce 172 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 649
-  def _reduce_172( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 653
+  def _reduce_173( val, _values, result )
  result = [val[0][:value]]
    result
   end
 .,.,
 
- # reduce 173 omitted
+ # reduce 174 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 651
-  def _reduce_174( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 655
+  def _reduce_175( val, _values, result )
  result = val[0] += val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 660
-  def _reduce_175( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 664
+  def _reduce_176( val, _values, result )
     val[1].each do |file|
         import(file)
     end
@@ -2164,8 +2184,8 @@ module_eval <<'.,.,', 'grammar.ra', 660
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 671
-  def _reduce_176( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 675
+  def _reduce_177( val, _values, result )
     @lexer.commentpop
     newdefine classname(val[1]), :arguments => val[2], :code => val[4], :line => val[0][:line]
     @lexer.indefine = false
@@ -2176,8 +2196,8 @@ module_eval <<'.,.,', 'grammar.ra', 671
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 676
-  def _reduce_177( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 680
+  def _reduce_178( val, _values, result )
     @lexer.commentpop
     newdefine classname(val[1]), :arguments => val[2], :line => val[0][:line]
     @lexer.indefine = false
@@ -2186,8 +2206,8 @@ module_eval <<'.,.,', 'grammar.ra', 676
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 685
-  def _reduce_178( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 689
+  def _reduce_179( val, _values, result )
     @lexer.commentpop
     # Our class gets defined in the parent namespace, not our own.
     @lexer.namepop
@@ -2197,8 +2217,8 @@ module_eval <<'.,.,', 'grammar.ra', 685
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 691
-  def _reduce_179( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 695
+  def _reduce_180( val, _values, result )
     @lexer.commentpop
     # Our class gets defined in the parent namespace, not our own.
     @lexer.namepop
@@ -2208,8 +2228,8 @@ module_eval <<'.,.,', 'grammar.ra', 691
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 697
-  def _reduce_180( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 701
+  def _reduce_181( val, _values, result )
     @lexer.commentpop
     newnode val[1], :parent => val[2], :code => val[4], :line => val[0][:line]
     result = nil
@@ -2217,8 +2237,8 @@ module_eval <<'.,.,', 'grammar.ra', 697
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 701
-  def _reduce_181( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 705
+  def _reduce_182( val, _values, result )
     @lexer.commentpop
     newnode val[1], :parent => val[2], :line => val[0][:line]
     result = nil
@@ -2226,38 +2246,38 @@ module_eval <<'.,.,', 'grammar.ra', 701
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 702
-  def _reduce_182( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 706
+  def _reduce_183( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 704
-  def _reduce_183( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 708
+  def _reduce_184( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 705
-  def _reduce_184( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 709
+  def _reduce_185( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 706
-  def _reduce_185( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 710
+  def _reduce_186( val, _values, result )
  result = "class"
    result
   end
 .,.,
 
- # reduce 186 omitted
+ # reduce 187 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 716
-  def _reduce_187( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 720
+  def _reduce_188( val, _values, result )
     result = val[0]
     result = [result] unless result.is_a?(Array)
     result << val[2]
@@ -2265,71 +2285,71 @@ module_eval <<'.,.,', 'grammar.ra', 716
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 720
-  def _reduce_188( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 724
+  def _reduce_189( val, _values, result )
     result = ast AST::HostName, :value => val[0]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 721
-  def _reduce_189( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 725
+  def _reduce_190( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 722
-  def _reduce_190( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 726
+  def _reduce_191( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 723
-  def _reduce_191( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 727
+  def _reduce_192( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
- # reduce 192 omitted
+ # reduce 193 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 729
-  def _reduce_193( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 733
+  def _reduce_194( val, _values, result )
     result = nil
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 733
-  def _reduce_194( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 737
+  def _reduce_195( val, _values, result )
     result = ast AST::ASTArray, :children => []
    result
   end
 .,.,
 
- # reduce 195 omitted
+ # reduce 196 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 738
-  def _reduce_196( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 742
+  def _reduce_197( val, _values, result )
     result = nil
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 742
-  def _reduce_197( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 746
+  def _reduce_198( val, _values, result )
     result = val[1]
     result = [result] unless result[0].is_a?(Array)
    result
   end
 .,.,
 
- # reduce 198 omitted
+ # reduce 199 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 749
-  def _reduce_199( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 753
+  def _reduce_200( val, _values, result )
     result = val[0]
     result = [result] unless result[0].is_a?(Array)
     result << val[2]
@@ -2337,67 +2357,67 @@ module_eval <<'.,.,', 'grammar.ra', 749
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 754
-  def _reduce_200( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 758
+  def _reduce_201( val, _values, result )
     Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype")
     result = [val[0][:value], val[2]]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 758
-  def _reduce_201( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 762
+  def _reduce_202( val, _values, result )
     Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype")
     result = [val[0][:value]]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 760
-  def _reduce_202( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 764
+  def _reduce_203( val, _values, result )
     result = [val[0][:value], val[2]]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 762
-  def _reduce_203( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 766
+  def _reduce_204( val, _values, result )
     result = [val[0][:value]]
    result
   end
 .,.,
 
- # reduce 204 omitted
+ # reduce 205 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 767
-  def _reduce_205( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 771
+  def _reduce_206( val, _values, result )
     result = val[1]
    result
   end
 .,.,
 
- # reduce 206 omitted
+ # reduce 207 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 772
-  def _reduce_207( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 776
+  def _reduce_208( val, _values, result )
     result = val[1]
    result
   end
 .,.,
 
- # reduce 208 omitted
-
  # reduce 209 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 778
-  def _reduce_210( val, _values, result )
+ # reduce 210 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 782
+  def _reduce_211( val, _values, result )
     result = ast AST::Variable, :value => val[0][:value], :line => val[0][:line]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 786
-  def _reduce_211( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 790
+  def _reduce_212( val, _values, result )
     if val[1].instance_of?(AST::ASTArray)
         result = val[1]
     else
@@ -2407,8 +2427,8 @@ module_eval <<'.,.,', 'grammar.ra', 786
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 793
-  def _reduce_212( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 797
+  def _reduce_213( val, _values, result )
     if val[1].instance_of?(AST::ASTArray)
         result = val[1]
     else
@@ -2418,35 +2438,35 @@ module_eval <<'.,.,', 'grammar.ra', 793
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 795
-  def _reduce_213( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 799
+  def _reduce_214( val, _values, result )
     result = ast AST::ASTArray
    result
   end
 .,.,
 
- # reduce 214 omitted
-
  # reduce 215 omitted
 
  # reduce 216 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 800
-  def _reduce_217( val, _values, result )
+ # reduce 217 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 804
+  def _reduce_218( val, _values, result )
  result = nil
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 805
-  def _reduce_218( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 809
+  def _reduce_219( val, _values, result )
     result = ast AST::Regex, :value => val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 813
-  def _reduce_219( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 817
+  def _reduce_220( val, _values, result )
     if val[1].instance_of?(AST::ASTHash)
         result = val[1]
     else
@@ -2456,8 +2476,8 @@ module_eval <<'.,.,', 'grammar.ra', 813
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 820
-  def _reduce_220( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 824
+  def _reduce_221( val, _values, result )
     if val[1].instance_of?(AST::ASTHash)
         result = val[1]
     else
@@ -2467,17 +2487,17 @@ module_eval <<'.,.,', 'grammar.ra', 820
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 822
-  def _reduce_221( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 826
+  def _reduce_222( val, _values, result )
     result = ast AST::ASTHash
    result
   end
 .,.,
 
- # reduce 222 omitted
+ # reduce 223 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 832
-  def _reduce_223( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 836
+  def _reduce_224( val, _values, result )
     if val[0].instance_of?(AST::ASTHash)
         result = val[0].merge(val[2])
     else
@@ -2488,38 +2508,38 @@ module_eval <<'.,.,', 'grammar.ra', 832
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 836
-  def _reduce_224( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 840
+  def _reduce_225( val, _values, result )
     result = ast AST::ASTHash, { :value => { val[0] => val[2] } }
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 837
-  def _reduce_225( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 841
+  def _reduce_226( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 838
-  def _reduce_226( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 842
+  def _reduce_227( val, _values, result )
  result = val[0]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 843
-  def _reduce_227( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 847
+  def _reduce_228( val, _values, result )
     result = ast AST::HashOrArrayAccess, :variable => val[0][:value], :key => val[2]
    result
   end
 .,.,
 
- # reduce 228 omitted
+ # reduce 229 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 848
-  def _reduce_229( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 852
+  def _reduce_230( val, _values, result )
     result = ast AST::HashOrArrayAccess, :variable => val[0], :key => val[2]
    result
   end
diff --git a/spec/unit/parser/ast/in_operator.rb b/spec/unit/parser/ast/in_operator.rb
new file mode 100644
index 0000000..df73645
--- /dev/null
+++ b/spec/unit/parser/ast/in_operator.rb
@@ -0,0 +1,60 @@
+#!/usr/bin/env ruby
+
+require File.dirname(__FILE__) + '/../../../spec_helper'
+
+require 'puppet/parser/ast/in_operator'
+
+describe Puppet::Parser::AST::InOperator do
+    before :each do
+        @scope = Puppet::Parser::Scope.new()
+
+        @lval = stub 'lval'
+        @lval.stubs(:safeevaluate).with(@scope).returns("left")
+
+        @rval = stub 'rval'
+        @rval.stubs(:safeevaluate).with(@scope).returns("right")
+
+        @operator = Puppet::Parser::AST::InOperator.new :lval => @lval, :rval => @rval
+    end
+
+    it "should evaluate the left operand" do
+        @lval.expects(:safeevaluate).with(@scope).returns("string")
+
+        @operator.evaluate(@scope)
+    end
+
+    it "should evaluate the right operand" do
+        @rval.expects(:safeevaluate).with(@scope).returns("string")
+
+        @operator.evaluate(@scope)
+    end
+
+    it "should raise an argument error if lval is not a string" do
+        @lval.expects(:safeevaluate).with(@scope).returns([12,13])
+
+        lambda { @operator.evaluate(@scope) }.should raise_error
+    end
+
+    it "should raise an argument error if rval doesn't support the include? method" do
+        @rval.expects(:safeevaluate).with(@scope).returns(stub 'value')
+
+        lambda { @operator.evaluate(@scope) }.should raise_error
+    end
+
+    it "should not raise an argument error if rval supports the include? method" do
+        @rval.expects(:safeevaluate).with(@scope).returns(stub 'value', :include? => true)
+
+        lambda { @operator.evaluate(@scope) }.should_not raise_error
+    end
+
+    it "should return rval.include?(lval)" do
+        lval = stub 'lvalue', :is_a? => true
+        @lval.stubs(:safeevaluate).with(@scope).returns(lval)
+
+        rval = stub 'rvalue'
+        @rval.stubs(:safeevaluate).with(@scope).returns(rval)
+        rval.expects(:include?).with(lval).returns(:result)
+
+        @operator.evaluate(@scope).should == :result
+    end
+end
diff --git a/spec/unit/parser/lexer.rb b/spec/unit/parser/lexer.rb
index 480a416..c437034 100755
--- a/spec/unit/parser/lexer.rb
+++ b/spec/unit/parser/lexer.rb
@@ -203,7 +203,8 @@ describe Puppet::Parser::Lexer::TOKENS do
         "or"   => :OR,
         "undef"   => :UNDEF,
         "false" => :FALSE,
-        "true" => :TRUE
+        "true" => :TRUE,
+        "in" => :IN,
     }.each do |string, name|
         it "should have a keyword named #{name.to_s}" do
             Puppet::Parser::Lexer::KEYWORDS[name].should_not be_nil

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list