[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:30:21 UTC 2010


The following commit has been merged in the upstream branch:
commit 164f1ce85bad49c7e197deeb452828c94539e06e
Author: Brice Figureau <brice-puppet at daysofwonder.com>
Date:   Sat Nov 14 19:51:15 2009 +0100

    Allow adding single key to hashes
    
    This patch allow this syntax:
    $hash[mykey] = 12
    
    If the key already exist an error is raised. Hashes are essentially
    write only, like puppet variables.
    
    Signed-off-by: Brice Figureau <brice-puppet at daysofwonder.com>

diff --git a/lib/puppet/parser/ast/leaf.rb b/lib/puppet/parser/ast/leaf.rb
index 206ea5c..0f427ef 100644
--- a/lib/puppet/parser/ast/leaf.rb
+++ b/lib/puppet/parser/ast/leaf.rb
@@ -142,17 +142,36 @@ class Puppet::Parser::AST
     class HashOrArrayAccess < AST::Leaf
         attr_accessor :variable, :key
 
-        def evaluate(scope)
+        def evaluate_container(scope)
             container = variable.respond_to?(:evaluate) ? variable.safeevaluate(scope) : variable
-            object = (container.is_a?(Hash) or container.is_a?(Array)) ? container : scope.lookupvar(container)
+            (container.is_a?(Hash) or container.is_a?(Array)) ? container : scope.lookupvar(container)
+        end
 
-            accesskey = key.respond_to?(:evaluate) ? key.safeevaluate(scope) : key
+        def evaluate_key(scope)
+            key.respond_to?(:evaluate) ? key.safeevaluate(scope) : key
+        end
+
+        def evaluate(scope)
+            object = evaluate_container(scope)
 
             unless object.is_a?(Hash) or object.is_a?(Array)
                 raise Puppet::ParseError, "#{variable} is not an hash or array when accessing it with #{accesskey}"
             end
 
-            return object[accesskey]
+            return object[evaluate_key(scope)]
+        end
+
+        # Assign value to this hashkey or array index
+        def assign(scope, value)
+            object = evaluate_container(scope)
+            accesskey = evaluate_key(scope)
+
+            if object.is_a?(Hash) and object.include?(accesskey)
+                raise Puppet::ParseError, "Assigning to the hash '#{variable}' with an existing key '#{accesskey}' is forbidden"
+            end
+
+            # assign to hash or array
+            object[accesskey] = value
         end
 
         def to_s
diff --git a/lib/puppet/parser/ast/vardef.rb b/lib/puppet/parser/ast/vardef.rb
index ae24b32..f103d49 100644
--- a/lib/puppet/parser/ast/vardef.rb
+++ b/lib/puppet/parser/ast/vardef.rb
@@ -13,11 +13,15 @@ class Puppet::Parser::AST
         # Look up our name and value, and store them appropriately.  The
         # lexer strips off the syntax stuff like '$'.
         def evaluate(scope)
-            name = @name.safeevaluate(scope)
             value = @value.safeevaluate(scope)
-
-            parsewrap do
-                scope.setvar(name,value, :file => @file, :line => @line, :append => @append)
+            if name.is_a?(HashOrArrayAccess)
+                name.assign(scope, value)
+            else
+                name = @name.safeevaluate(scope)
+
+                parsewrap do
+                    scope.setvar(name,value, :file => @file, :line => @line, :append => @append)
+                end
             end
         end
 
diff --git a/lib/puppet/parser/grammar.ra b/lib/puppet/parser/grammar.ra
index 6b7b31b..76a82e3 100644
--- a/lib/puppet/parser/grammar.ra
+++ b/lib/puppet/parser/grammar.ra
@@ -336,6 +336,9 @@ assignment:     VARIABLE EQUALS expression {
     variable = ast AST::Name, :value => val[0][:value], :line => val[0][:line]
     result = ast AST::VarDef, :name => variable, :value => val[2], :line => val[0][:line]
 }
+            | hasharrayaccess EQUALS expression {
+    result = ast AST::VarDef, :name => val[0], :value => val[2]
+}
 
 append:     VARIABLE APPENDS expression {
     variable = ast AST::Name, :value => val[0][:value], :line => val[0][:line]
diff --git a/lib/puppet/parser/parser.rb b/lib/puppet/parser/parser.rb
index 5c05e55..7e9235f 100644
--- a/lib/puppet/parser/parser.rb
+++ b/lib/puppet/parser/parser.rb
@@ -29,7 +29,7 @@ module Puppet
 
     class Parser < Racc::Parser
 
-module_eval <<'..end grammar.ra modeval..id6e4c43cdab', 'grammar.ra', 850
+module_eval <<'..end grammar.ra modeval..id884310a196', 'grammar.ra', 853
 
 # It got too annoying having code in a file that needs to be compiled.
 require 'puppet/parser/parser_support'
@@ -41,7 +41,7 @@ require 'puppet/parser/parser_support'
 
 # $Id$
 
-..end grammar.ra modeval..id6e4c43cdab
+..end grammar.ra modeval..id884310a196
 
 ##### racc 1.4.5 generates ###
 
@@ -119,51 +119,51 @@ racc_reduce_table = [
  1, 107, :_reduce_none,
  1, 107, :_reduce_none,
  3, 70, :_reduce_72,
- 3, 79, :_reduce_73,
- 0, 94, :_reduce_74,
- 1, 94, :_reduce_75,
- 3, 94, :_reduce_76,
- 3, 111, :_reduce_77,
- 3, 113, :_reduce_78,
- 1, 114, :_reduce_none,
- 1, 114, :_reduce_none,
- 0, 97, :_reduce_81,
- 1, 97, :_reduce_82,
- 3, 97, :_reduce_83,
+ 3, 70, :_reduce_73,
+ 3, 79, :_reduce_74,
+ 0, 94, :_reduce_75,
+ 1, 94, :_reduce_76,
+ 3, 94, :_reduce_77,
+ 3, 112, :_reduce_78,
+ 3, 114, :_reduce_79,
  1, 115, :_reduce_none,
- 3, 115, :_reduce_85,
+ 1, 115, :_reduce_none,
+ 0, 97, :_reduce_82,
+ 1, 97, :_reduce_83,
+ 3, 97, :_reduce_84,
+ 1, 116, :_reduce_none,
+ 3, 116, :_reduce_86,
  1, 105, :_reduce_none,
  1, 105, :_reduce_none,
  1, 105, :_reduce_none,
  1, 105, :_reduce_none,
  1, 105, :_reduce_none,
  1, 105, :_reduce_none,
- 1, 112, :_reduce_none,
- 1, 112, :_reduce_none,
- 1, 112, :_reduce_none,
- 1, 112, :_reduce_none,
- 1, 112, :_reduce_none,
- 1, 112, :_reduce_none,
- 1, 112, :_reduce_none,
- 1, 112, :_reduce_none,
- 1, 112, :_reduce_none,
- 1, 112, :_reduce_none,
- 1, 112, :_reduce_none,
- 1, 112, :_reduce_none,
- 4, 87, :_reduce_104,
- 3, 87, :_reduce_105,
- 1, 89, :_reduce_106,
+ 1, 113, :_reduce_none,
+ 1, 113, :_reduce_none,
+ 1, 113, :_reduce_none,
+ 1, 113, :_reduce_none,
+ 1, 113, :_reduce_none,
+ 1, 113, :_reduce_none,
+ 1, 113, :_reduce_none,
+ 1, 113, :_reduce_none,
+ 1, 113, :_reduce_none,
+ 1, 113, :_reduce_none,
+ 1, 113, :_reduce_none,
+ 1, 113, :_reduce_none,
+ 4, 87, :_reduce_105,
+ 3, 87, :_reduce_106,
  1, 89, :_reduce_107,
- 1, 86, :_reduce_108,
- 4, 82, :_reduce_109,
+ 1, 89, :_reduce_108,
+ 1, 86, :_reduce_109,
  4, 82, :_reduce_110,
- 6, 72, :_reduce_111,
- 5, 72, :_reduce_112,
- 0, 118, :_reduce_none,
- 4, 118, :_reduce_114,
- 3, 118, :_reduce_115,
+ 4, 82, :_reduce_111,
+ 6, 72, :_reduce_112,
+ 5, 72, :_reduce_113,
+ 0, 119, :_reduce_none,
+ 4, 119, :_reduce_115,
+ 3, 119, :_reduce_116,
  1, 110, :_reduce_none,
- 3, 110, :_reduce_117,
  3, 110, :_reduce_118,
  3, 110, :_reduce_119,
  3, 110, :_reduce_120,
@@ -171,665 +171,704 @@ racc_reduce_table = [
  3, 110, :_reduce_122,
  3, 110, :_reduce_123,
  3, 110, :_reduce_124,
- 2, 110, :_reduce_125,
- 3, 110, :_reduce_126,
+ 3, 110, :_reduce_125,
+ 2, 110, :_reduce_126,
  3, 110, :_reduce_127,
  3, 110, :_reduce_128,
  3, 110, :_reduce_129,
  3, 110, :_reduce_130,
  3, 110, :_reduce_131,
- 2, 110, :_reduce_132,
- 3, 110, :_reduce_133,
+ 3, 110, :_reduce_132,
+ 2, 110, :_reduce_133,
  3, 110, :_reduce_134,
  3, 110, :_reduce_135,
- 5, 71, :_reduce_136,
- 1, 120, :_reduce_none,
- 2, 120, :_reduce_138,
- 5, 121, :_reduce_139,
- 4, 121, :_reduce_140,
- 1, 122, :_reduce_none,
- 3, 122, :_reduce_142,
- 3, 88, :_reduce_143,
- 1, 124, :_reduce_none,
- 4, 124, :_reduce_145,
- 1, 126, :_reduce_none,
- 3, 126, :_reduce_147,
- 3, 125, :_reduce_148,
- 1, 123, :_reduce_none,
- 1, 123, :_reduce_none,
- 1, 123, :_reduce_none,
+ 3, 110, :_reduce_136,
+ 5, 71, :_reduce_137,
+ 1, 121, :_reduce_none,
+ 2, 121, :_reduce_139,
+ 5, 122, :_reduce_140,
+ 4, 122, :_reduce_141,
  1, 123, :_reduce_none,
- 1, 123, :_reduce_none,
- 1, 123, :_reduce_none,
- 1, 123, :_reduce_none,
- 1, 123, :_reduce_156,
- 1, 123, :_reduce_none,
- 1, 127, :_reduce_158,
- 3, 127, :_reduce_159,
- 2, 73, :_reduce_160,
- 6, 75, :_reduce_161,
- 5, 75, :_reduce_162,
- 6, 76, :_reduce_163,
- 5, 76, :_reduce_164,
- 6, 77, :_reduce_165,
- 5, 77, :_reduce_166,
- 1, 96, :_reduce_167,
- 1, 91, :_reduce_168,
+ 3, 123, :_reduce_143,
+ 3, 88, :_reduce_144,
+ 1, 125, :_reduce_none,
+ 4, 125, :_reduce_146,
+ 1, 127, :_reduce_none,
+ 3, 127, :_reduce_148,
+ 3, 126, :_reduce_149,
+ 1, 124, :_reduce_none,
+ 1, 124, :_reduce_none,
+ 1, 124, :_reduce_none,
+ 1, 124, :_reduce_none,
+ 1, 124, :_reduce_none,
+ 1, 124, :_reduce_none,
+ 1, 124, :_reduce_none,
+ 1, 124, :_reduce_157,
+ 1, 124, :_reduce_none,
+ 1, 128, :_reduce_159,
+ 3, 128, :_reduce_160,
+ 2, 73, :_reduce_161,
+ 6, 75, :_reduce_162,
+ 5, 75, :_reduce_163,
+ 6, 76, :_reduce_164,
+ 5, 76, :_reduce_165,
+ 6, 77, :_reduce_166,
+ 5, 77, :_reduce_167,
+ 1, 96, :_reduce_168,
  1, 91, :_reduce_169,
- 1, 130, :_reduce_none,
- 3, 130, :_reduce_171,
- 1, 132, :_reduce_172,
- 1, 133, :_reduce_173,
- 1, 133, :_reduce_174,
- 1, 133, :_reduce_175,
- 1, 133, :_reduce_176,
- 1, 133, :_reduce_none,
- 0, 65, :_reduce_178,
- 0, 134, :_reduce_179,
- 1, 128, :_reduce_none,
- 3, 128, :_reduce_181,
- 3, 128, :_reduce_182,
- 1, 135, :_reduce_none,
- 3, 135, :_reduce_184,
- 3, 136, :_reduce_185,
- 1, 136, :_reduce_186,
- 3, 136, :_reduce_187,
- 1, 136, :_reduce_188,
+ 1, 91, :_reduce_170,
  1, 131, :_reduce_none,
- 2, 131, :_reduce_190,
+ 3, 131, :_reduce_172,
+ 1, 133, :_reduce_173,
+ 1, 134, :_reduce_174,
+ 1, 134, :_reduce_175,
+ 1, 134, :_reduce_176,
+ 1, 134, :_reduce_177,
+ 1, 134, :_reduce_none,
+ 0, 65, :_reduce_179,
+ 0, 135, :_reduce_180,
  1, 129, :_reduce_none,
- 2, 129, :_reduce_192,
- 1, 137, :_reduce_none,
- 1, 137, :_reduce_none,
- 1, 84, :_reduce_195,
- 3, 109, :_reduce_196,
- 4, 109, :_reduce_197,
- 2, 109, :_reduce_198,
- 1, 116, :_reduce_none,
- 1, 116, :_reduce_none,
- 0, 95, :_reduce_none,
- 1, 95, :_reduce_202,
- 1, 119, :_reduce_203,
- 3, 117, :_reduce_204,
- 4, 117, :_reduce_205,
- 2, 117, :_reduce_206,
+ 3, 129, :_reduce_182,
+ 3, 129, :_reduce_183,
+ 1, 136, :_reduce_none,
+ 3, 136, :_reduce_185,
+ 3, 137, :_reduce_186,
+ 1, 137, :_reduce_187,
+ 3, 137, :_reduce_188,
+ 1, 137, :_reduce_189,
+ 1, 132, :_reduce_none,
+ 2, 132, :_reduce_191,
+ 1, 130, :_reduce_none,
+ 2, 130, :_reduce_193,
  1, 138, :_reduce_none,
- 3, 138, :_reduce_208,
+ 1, 138, :_reduce_none,
+ 1, 84, :_reduce_196,
+ 3, 109, :_reduce_197,
+ 4, 109, :_reduce_198,
+ 2, 109, :_reduce_199,
+ 1, 117, :_reduce_none,
+ 1, 117, :_reduce_none,
+ 0, 95, :_reduce_none,
+ 1, 95, :_reduce_203,
+ 1, 120, :_reduce_204,
+ 3, 118, :_reduce_205,
+ 4, 118, :_reduce_206,
+ 2, 118, :_reduce_207,
+ 1, 139, :_reduce_none,
  3, 139, :_reduce_209,
- 1, 140, :_reduce_210,
- 1, 140, :_reduce_211,
- 1, 140, :_reduce_212,
- 4, 141, :_reduce_213,
+ 3, 140, :_reduce_210,
+ 1, 141, :_reduce_211,
+ 1, 141, :_reduce_212,
+ 1, 141, :_reduce_213,
+ 4, 111, :_reduce_214,
  1, 90, :_reduce_none,
- 4, 90, :_reduce_215 ]
+ 4, 90, :_reduce_216 ]
 
-racc_reduce_n = 216
+racc_reduce_n = 217
 
-racc_shift_n = 355
+racc_shift_n = 358
 
 racc_action_table = [
-    79,    57,    60,    57,    60,   270,    79,    57,    60,   144,
-    84,    39,    40,   327,   206,   115,    79,    57,    60,   309,
-    84,    98,   299,    39,    40,    99,   326,   308,   168,   169,
-   215,    48,   306,   268,   269,    59,   123,    48,   100,    67,
-   113,    59,    62,   214,   121,    67,    41,    48,    64,    43,
-    55,    59,    62,    54,    64,    67,   210,   314,    41,    42,
-    55,    43,   101,   170,    64,    42,    79,    57,    60,    42,
-    84,   274,   272,   145,   183,    42,   278,  -150,    39,    40,
-   271,    42,   268,   269,   183,   182,    75,    79,    57,    60,
-   187,    84,   168,   169,   178,   182,   173,    48,   274,   206,
-   187,    59,    62,   278,   183,    67,    79,    57,    60,   177,
-    55,    82,   145,    41,    64,   182,    43,    89,    48,   284,
-   187,   255,    59,    62,   256,    42,    67,   170,    79,    57,
-    60,    55,    84,   183,   176,    64,    42,    48,    54,    57,
-    60,    59,   220,  -153,   182,    67,    42,   225,    36,   187,
-   121,   227,   228,    36,    64,     4,     8,   287,    50,    48,
-     4,   180,   159,    59,    62,    42,   180,    67,    36,    48,
-   150,   199,    55,    59,    62,     4,    64,    67,    36,   253,
-  -154,    51,    55,   227,   254,     4,    64,    42,    79,    57,
-    60,   273,    84,   156,   160,   268,   269,    42,   162,   163,
-   164,   148,   149,   151,   291,   156,   160,   136,    75,    79,
-    57,    60,   293,    84,  -155,   164,   148,    57,    60,    48,
-   156,   160,   159,    59,    62,   156,   160,    67,    33,    34,
-   150,   295,    55,    82,   227,   337,    64,   164,   148,    89,
-    48,   145,   156,   160,    59,    62,  -150,    42,    67,  -152,
-    79,    57,    60,    55,    84,    99,   300,    64,   162,   163,
-   164,   148,   149,   151,   194,   156,   160,   200,    42,   180,
-    75,    79,    57,    60,   203,    84,   162,   163,   164,   148,
-  -149,    48,  -151,   156,   160,    59,    62,  -153,   264,    67,
-  -154,    75,   227,   228,    55,    82,   146,  -150,    64,  -151,
-   301,    89,    48,    98,    42,   205,    59,    62,   193,    42,
-    67,   304,   159,  -152,  -149,    55,    82,  -149,   144,    64,
-   150,   212,    89,    79,    57,    60,   313,    84,  -167,   208,
-    42,   141,  -151,    79,    57,    60,   324,    84,   325,    79,
-    57,    60,  -152,    84,   328,   138,   136,   110,   162,   163,
-   164,   148,   149,   151,    48,   156,   160,   208,    59,    62,
-   279,   208,    67,   338,    48,   301,   340,    55,    59,    62,
-    48,    64,    67,   104,    59,    62,   342,    55,    67,  -151,
-  -149,    64,    42,    55,    79,    57,    60,    64,    84,  -152,
-  -150,  -154,    42,   162,   163,   164,   148,   209,    42,   206,
-   156,   160,   102,   136,    75,    79,    57,    60,    47,    84,
-   348,  -202,    46,   212,   257,    48,    42,   nil,   159,    59,
-    62,   nil,   nil,    67,   nil,   nil,   150,   nil,    55,    82,
-   nil,   nil,    64,   nil,   nil,    89,    48,   nil,   nil,   nil,
-    59,    62,   nil,    42,    67,   nil,    79,    57,    60,    55,
-    84,   nil,   nil,    64,   162,   163,   164,   148,   149,   151,
-   nil,   156,   160,   nil,    42,   nil,    75,    79,    57,    60,
-   nil,    84,   nil,   nil,   nil,   nil,   nil,    48,   nil,   nil,
-   nil,    59,    62,   nil,   nil,    67,   nil,    75,   nil,   nil,
-    55,    82,   nil,   nil,    64,   nil,   nil,    89,    48,   nil,
-   nil,   nil,    59,    62,   nil,    42,    67,   nil,   nil,   nil,
-   nil,    55,    82,   nil,   nil,    64,   nil,   nil,    89,    79,
-    57,    60,   nil,    84,   nil,   nil,    42,   162,   163,   164,
-   148,   149,   151,   nil,   156,   160,   nil,   nil,   nil,    75,
-    79,    57,    60,   nil,    84,   nil,   nil,   nil,   nil,   nil,
-    48,   nil,   nil,   nil,    59,    62,   nil,   nil,    67,   nil,
-    75,   nil,   nil,    55,    82,   nil,   nil,    64,   nil,   nil,
-    89,    48,   nil,   nil,   nil,    59,    62,   nil,    42,    67,
-   nil,   nil,   nil,   nil,    55,    82,   nil,   nil,    64,   nil,
-   nil,    89,    79,    57,    60,   nil,    84,   nil,   nil,    42,
-   162,   163,   164,   148,   149,   151,   nil,   156,   160,   nil,
-   nil,   nil,    75,    79,    57,    60,   nil,    84,   nil,   nil,
-   nil,   nil,   nil,    48,   nil,   nil,   nil,    59,    62,   nil,
-   nil,    67,   nil,    75,   nil,   nil,    55,    82,   nil,   nil,
-    64,   nil,   nil,    89,    48,   nil,   nil,   nil,    59,    62,
-   nil,    42,    67,   nil,   nil,   nil,   nil,    55,    82,   nil,
-   nil,    64,   nil,   nil,    89,    79,    57,    60,   nil,    84,
-   nil,   nil,    42,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,    75,    79,    57,    60,   165,
-    84,   nil,   nil,   nil,   nil,   nil,    48,   nil,   nil,   nil,
-    59,    62,   nil,   nil,    67,   nil,   nil,   nil,   nil,    55,
-    82,   nil,   nil,    64,   nil,   nil,    89,    48,   nil,   nil,
-   nil,    59,    62,   nil,    42,    67,   nil,    79,    57,    60,
-    55,    84,   nil,   nil,    64,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,    42,   nil,    75,    79,    57,
-    60,   nil,    84,   nil,   nil,   nil,   nil,   nil,    48,   nil,
-   nil,   nil,    59,    62,   nil,   nil,    67,   nil,   nil,   nil,
-   nil,    55,    82,   nil,   nil,    64,   nil,   nil,    89,    48,
-   nil,   nil,   nil,    59,    62,   nil,    42,    67,   nil,    79,
-    57,    60,    55,    84,   nil,   nil,    64,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,    42,   nil,    75,
-    79,    57,    60,   nil,    84,   nil,   nil,   nil,   nil,   nil,
-    48,   nil,   nil,   nil,    59,    62,   nil,   nil,    67,   nil,
-    75,   nil,   nil,    55,    82,   nil,   nil,    64,   nil,   nil,
-    89,    48,   nil,   nil,   nil,    59,    62,   nil,    42,    67,
-   nil,   nil,   nil,   nil,    55,    82,   nil,   nil,    64,   nil,
-   nil,    89,    79,    57,    60,   nil,    84,   nil,   nil,    42,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    75,    79,    57,    60,   nil,    84,   nil,   nil,
-   nil,   nil,   nil,    48,   nil,   nil,   nil,    59,    62,   nil,
-   nil,    67,   nil,   nil,   nil,   nil,    55,    82,   nil,   nil,
-    64,   nil,   nil,    89,    48,   nil,   nil,   nil,    59,    62,
-   nil,    42,    67,   nil,    79,    57,    60,    55,    84,   nil,
-   nil,    64,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    42,   nil,    75,    79,    57,    60,   nil,    84,
-   nil,   nil,   nil,   nil,   nil,    48,   nil,   nil,   nil,    59,
-    62,   nil,   nil,    67,   nil,    75,   nil,   nil,    55,    82,
-   nil,   nil,    64,   nil,   nil,    89,    48,   nil,   nil,   nil,
-    59,    62,   nil,    42,    67,   nil,   nil,   nil,   nil,    55,
-    82,   nil,   nil,    64,   nil,   nil,    89,    79,    57,    60,
-   nil,    84,   nil,   nil,    42,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,    75,    79,    57,
-    60,   nil,    84,   nil,   nil,   nil,   nil,   nil,    48,   nil,
-   nil,   nil,    59,    62,   nil,   nil,    67,   nil,    75,   nil,
-   nil,    55,    82,   nil,   nil,    64,    57,    60,    89,    48,
-   311,   nil,   nil,    59,    62,   nil,    42,    67,   nil,   nil,
-   nil,   nil,    55,    82,   nil,   nil,    64,   nil,   nil,    89,
-    79,    57,    60,   nil,    84,   nil,   182,    42,    57,    60,
-    59,   220,   nil,   nil,    67,   nil,   nil,   nil,   nil,   121,
-   nil,   nil,   nil,    64,   nil,   nil,    57,    60,   231,   nil,
-   nil,    48,   nil,   nil,    42,    59,    62,   nil,    48,    67,
-   nil,   nil,    59,    62,    55,   nil,    67,   nil,    64,   nil,
-    51,    55,    57,    60,   nil,    64,   182,   nil,   nil,    42,
-    59,   220,    57,    60,    67,   nil,    42,   nil,   nil,   121,
-   nil,   nil,   139,    64,   nil,   nil,   nil,   nil,    57,    60,
-   nil,   nil,    48,   nil,    42,   nil,    59,    62,    57,    60,
-    67,   nil,   182,   nil,    51,    55,    59,   220,   nil,    64,
-    67,   nil,   nil,   nil,   nil,   121,   nil,   nil,   182,    64,
-    42,   nil,    59,   220,    57,    60,    67,   nil,   182,   nil,
-    42,   121,    59,   220,   nil,    64,    67,   nil,   nil,   nil,
-   nil,   121,   nil,    57,    60,    64,    42,   nil,   nil,    57,
-    60,   nil,   222,   nil,   182,   nil,    42,   nil,    59,   220,
-   nil,   nil,    67,   294,   nil,    57,    60,   121,   nil,   nil,
-   nil,    64,   nil,    48,   nil,    57,    60,    59,    62,   182,
-   nil,    67,    42,    59,   220,    51,    55,    67,   nil,   nil,
-    64,   nil,   121,   nil,   nil,   182,    64,   nil,   nil,    59,
-   220,    42,   nil,    67,   nil,    48,   161,    42,   121,    59,
-    62,   nil,    64,    67,   nil,   154,   159,    51,    55,   nil,
-   nil,   nil,    64,    42,   150,   152,   155,   158,   154,   159,
-   nil,   nil,   nil,    42,   nil,   nil,   nil,   150,   152,   155,
-   158,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   153,   157,
-   nil,   nil,   162,   163,   164,   148,   149,   151,   nil,   156,
-   160,   153,   157,   nil,   nil,   162,   163,   164,   148,   149,
-   151,   nil,   156,   160,   154,   159,   nil,   nil,   nil,   nil,
-   nil,   nil,   234,   150,   152,   155,   158,   154,   159,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   150,   152,   155,   158,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   153,   157,   nil,
-   nil,   162,   163,   164,   148,   149,   151,   nil,   156,   160,
-   153,   157,   nil,   nil,   162,   163,   164,   148,   149,   151,
-   nil,   156,   160,   154,   159,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   150,   152,   155,   158,   154,   159,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   150,   152,   155,   158,   nil,
+    82,    61,    64,   317,    87,   172,   173,   211,   187,   308,
+   276,   328,    42,    43,   330,   211,   121,   283,   275,   186,
+    78,    82,    61,    64,   191,    87,   101,   329,   272,   273,
+   102,    51,  -153,    42,    43,    63,    66,    42,    43,    71,
+   174,   119,  -150,   103,    58,    84,   288,    44,    68,   215,
+    46,    92,    51,    57,   172,   173,    63,    66,   175,    45,
+    71,   149,    82,    61,    64,    58,    87,   104,    44,    68,
+    45,    46,    44,   150,   303,    46,   274,   219,   314,   211,
+    45,   141,    78,    82,    61,    64,   313,    87,    34,   174,
+   218,    45,   150,    51,  -152,    45,   291,    63,    66,    35,
+    36,    71,   184,    78,   272,   273,    58,    84,   163,   187,
+    68,   184,   259,    92,    51,   260,   154,    38,    63,    66,
+   186,    45,    71,    38,     4,   191,   204,    58,    84,  -154,
+     4,    68,   295,    38,    92,    82,    61,    64,   141,    87,
+     4,     9,    45,   187,   166,   167,   168,   152,   153,   155,
+  -155,   160,   164,   187,   186,    78,    82,    61,    64,   191,
+    87,    38,   278,   298,   186,  -151,    51,   281,     4,   191,
+    63,    66,   168,   152,    71,   300,    78,   160,   164,    58,
+    84,   163,   150,    68,   101,   278,    92,    51,  -151,   154,
+   281,    63,    66,   261,    45,    71,  -156,   163,   221,  -155,
+    58,    84,   223,   224,    68,   154,  -154,    92,    82,    61,
+    64,  -153,    87,    61,    64,    45,  -150,   166,   167,   168,
+   152,   153,   155,   180,   160,   164,   160,   164,    78,    57,
+    61,    64,   149,   166,   167,   168,   152,   153,   155,    51,
+   160,   164,   148,    63,    66,  -168,   163,    71,    45,    53,
+    61,    64,    58,    84,   154,   304,    68,   168,   152,    92,
+    51,  -152,   160,   164,    63,    66,   277,    45,    71,   181,
+   272,   273,    55,    58,    82,    61,    64,    68,    87,   223,
+   340,   182,   166,   167,   168,   152,   153,   155,    45,   160,
+   164,   160,   164,   184,    78,    82,    61,    64,   307,    87,
+   166,   167,   168,   152,    45,    51,   145,   160,   164,    63,
+    66,   257,    34,    71,   197,   223,   258,   217,    58,    84,
+   316,   198,    68,   268,   102,    92,    51,   223,   224,   141,
+    63,    66,   201,    45,    71,   327,    82,    61,    64,    58,
+    87,   213,   205,    68,   331,   114,    82,    61,    64,   206,
+    87,  -152,   213,   107,    45,   166,   167,   168,   152,   153,
+   155,   210,   160,   164,   341,   304,    78,    51,   343,  -150,
+   345,    63,    66,  -152,  -150,    71,  -153,    51,  -151,  -155,
+    58,    63,    66,   105,    68,    71,   217,   213,    50,    49,
+    58,    84,   332,   351,    68,    45,  -203,    92,    82,    61,
+    64,    39,    87,   214,  -151,    45,  -153,   nil,    82,    61,
+    64,   nil,    87,    19,   nil,    23,    27,   nil,     1,     5,
+   nil,    12,   nil,    17,   nil,    21,   nil,    28,    78,    51,
+     4,     9,   nil,    63,    66,   nil,   nil,    71,   nil,    51,
+   nil,   nil,    58,    63,    66,   nil,    68,    71,   nil,   nil,
+   nil,   nil,    58,    84,   352,   nil,    68,    45,   nil,    92,
+    82,    61,    64,   nil,    87,   nil,   nil,    45,   nil,   nil,
+    82,    61,    64,   nil,    87,    19,   nil,    23,    27,   nil,
+     1,     5,   nil,    12,   nil,    17,   nil,    21,   nil,    28,
+    78,    51,     4,     9,   nil,    63,    66,   nil,   nil,    71,
+   nil,    51,   nil,   nil,    58,    63,    66,   nil,    68,    71,
+   nil,   nil,   nil,   nil,    58,    84,   nil,   nil,    68,    45,
+   nil,    92,    82,    61,    64,   nil,    87,   nil,   nil,    45,
+   166,   167,   168,   152,   nil,   nil,   nil,   160,   164,   nil,
+   nil,   nil,    78,    82,    61,    64,   nil,    87,   nil,   nil,
+   nil,   nil,   nil,    51,   nil,   nil,   nil,    63,    66,   nil,
+   nil,    71,   nil,   nil,   nil,   nil,    58,    84,   nil,   nil,
+    68,   nil,   nil,    92,    51,   nil,   nil,   nil,    63,    66,
+   nil,    45,    71,   nil,    82,    61,    64,    58,    87,   nil,
+   nil,    68,   166,   167,   168,   152,   153,   155,   nil,   160,
+   164,   nil,    45,   nil,    78,    82,    61,    64,   nil,    87,
+   nil,   nil,   nil,   nil,   nil,    51,   nil,   nil,   nil,    63,
+    66,   nil,   nil,    71,   nil,   nil,   nil,   nil,    58,    84,
+   nil,   nil,    68,   nil,   nil,    92,    51,   nil,   nil,   nil,
+    63,    66,   nil,    45,    71,   nil,    82,    61,    64,    58,
+    87,   nil,   nil,    68,   nil,   nil,    82,    61,    64,   nil,
+    87,   nil,   nil,   nil,    45,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,    78,    51,   nil,   nil,
+   nil,    63,    66,   nil,   nil,    71,   nil,    51,   nil,   nil,
+    58,    63,    66,   nil,    68,    71,   nil,   nil,   nil,   nil,
+    58,    84,   nil,   nil,    68,    45,   nil,    92,    82,    61,
+    64,   nil,    87,   nil,   nil,    45,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    78,    82,
+    61,    64,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    51,
+   nil,   nil,   nil,    63,    66,   nil,   nil,    71,   nil,   nil,
+   nil,   nil,    58,    84,   nil,   nil,    68,   nil,   nil,    92,
+    51,   nil,   nil,   nil,    63,   128,   nil,    45,    71,   nil,
+    82,    61,    64,   126,    87,   nil,   nil,    68,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    45,   nil,
+    78,    82,    61,    64,   nil,    87,   nil,   nil,   nil,   nil,
+   nil,    51,   nil,   nil,   nil,    63,    66,   nil,   nil,    71,
+   nil,    78,   nil,   nil,    58,    84,   nil,   nil,    68,   nil,
+   nil,    92,    51,   nil,   nil,   nil,    63,    66,   nil,    45,
+    71,   nil,   nil,   nil,   nil,    58,    84,   nil,   nil,    68,
+   nil,   nil,    92,    82,    61,    64,   nil,    87,   nil,   nil,
+    45,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,    78,    82,    61,    64,   nil,    87,   nil,
+   nil,   nil,   nil,   nil,    51,   nil,   nil,   nil,    63,    66,
+   nil,   nil,    71,   nil,   nil,   nil,   nil,    58,    84,   nil,
+   nil,    68,   nil,   nil,    92,    51,   nil,   nil,   nil,    63,
+    66,   nil,    45,    71,   nil,    82,    61,    64,    58,    87,
+   nil,   nil,    68,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,    45,   nil,    78,    82,    61,    64,   nil,
+    87,   nil,    82,    61,    64,   nil,    51,   nil,   nil,   nil,
+    63,    66,   nil,   nil,    71,   nil,   nil,   nil,   nil,    58,
+    84,   nil,   nil,    68,   nil,   nil,    92,    51,   nil,   nil,
+   nil,    63,    66,    51,    45,    71,   nil,    63,   229,   nil,
+    58,    71,   nil,   nil,    68,   nil,   126,    82,    61,    64,
+    68,    87,   nil,   nil,   nil,    45,   nil,   nil,   nil,   nil,
+   nil,    45,   nil,   nil,   nil,   nil,   nil,    78,    82,    61,
+    64,   169,    87,   nil,   nil,   nil,   nil,   nil,    51,   nil,
+   nil,   nil,    63,    66,   nil,   nil,    71,   nil,   nil,   nil,
+   nil,    58,    84,   nil,   nil,    68,   nil,   nil,    92,    51,
+   nil,   nil,   nil,    63,    66,   nil,    45,    71,   nil,    82,
+    61,    64,    58,    87,   nil,   nil,    68,   nil,   nil,    82,
+    61,    64,   nil,    87,   nil,   nil,   nil,    45,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    78,
+    51,   nil,   nil,   nil,    63,    66,   nil,   nil,    71,   nil,
+    51,   nil,   nil,    58,    63,    66,   nil,    68,    71,   nil,
+   nil,   nil,   nil,    58,    84,   nil,   nil,    68,    45,   nil,
+    92,    82,    61,    64,   nil,    87,   nil,   nil,    45,   nil,
+   nil,    82,    61,    64,   nil,    87,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   162,   163,   164,   148,   149,   151,   349,   156,   160,   nil,
-   157,   nil,   nil,   162,   163,   164,   148,   149,   151,   nil,
-   156,   160,   nil,   nil,   nil,   353,   nil,    18,   nil,    22,
-    26,   nil,     1,     5,   nil,    11,   nil,    16,   nil,    20,
-   nil,    27,   nil,   nil,     4,     8,    18,   303,    22,    26,
-   nil,     1,     5,   nil,    11,   nil,    16,   nil,    20,   nil,
-    27,   nil,   nil,     4,     8,   nil,   248,   nil,    18,   nil,
-    22,    26,   nil,     1,     5,   nil,    11,   nil,    16,   nil,
-    20,   nil,    27,   nil,   nil,     4,     8,    18,   280,    22,
-    26,   nil,     1,     5,   nil,    11,   nil,    16,   nil,    20,
-   nil,    27,   nil,   nil,     4,     8,   nil,   351,   nil,    18,
-   nil,    22,    26,   nil,     1,     5,   nil,    11,   nil,    16,
-   nil,    20,   nil,    27,   nil,   nil,     4,     8,    18,   329,
-    22,    26,   nil,     1,     5,   nil,    11,   nil,    16,   nil,
-    20,   nil,    27,   nil,   nil,     4,     8,   nil,   331,   nil,
-    18,   nil,    22,    26,   nil,     1,     5,   nil,    11,   nil,
-    16,   nil,    20,   nil,    27,   nil,   nil,     4,     8,    18,
-   346,    22,    26,   nil,     1,     5,   nil,    11,   nil,    16,
-   nil,    20,   nil,    27,   nil,   nil,     4,     8,   nil,   332,
-   nil,    18,   nil,    22,    26,   nil,     1,     5,   nil,    11,
-   nil,    16,   nil,    20,   nil,    27,   nil,   nil,     4,     8,
-    18,   282,    22,    26,   nil,     1,     5,   nil,    11,   nil,
-    16,   nil,    20,   nil,    27,   nil,   nil,     4,     8,   nil,
-   354,   nil,    18,   nil,    22,    26,   nil,     1,     5,   nil,
-    11,   nil,    16,   nil,    20,   nil,    27,   nil,   nil,     4,
-     8,    18,   nil,    22,    26,   nil,     1,     5,   nil,    11,
-   nil,    16,   nil,    20,   nil,    27,   nil,   nil,     4,     8,
-    18,   nil,    22,    26,   nil,     1,     5,   nil,    11,   nil,
-    16,   nil,    20,   nil,    27,   nil,   nil,     4,     8,    18,
-   nil,    22,    26,   nil,     1,     5,   nil,    11,   nil,    16,
-   nil,    20,   nil,    27,   nil,   nil,     4,     8 ]
+   nil,    78,    51,    61,    64,   nil,    63,    66,   nil,   nil,
+    71,   nil,    51,   nil,   nil,    58,    63,    66,   nil,    68,
+    71,   nil,    61,    64,   nil,    58,    84,   nil,   nil,    68,
+    45,   nil,    92,   186,   nil,   nil,   nil,    63,   229,   nil,
+    45,    71,   297,    61,    64,   nil,   126,   nil,   nil,   nil,
+    68,   nil,    51,    61,    64,   nil,    63,    66,   nil,   nil,
+    71,    45,   nil,   nil,    55,    58,   nil,   nil,   nil,    68,
+   nil,   nil,   nil,   186,    61,    64,   nil,    63,   229,   nil,
+    45,    71,   nil,   186,    61,    64,   126,    63,   229,   nil,
+    68,    71,   nil,   nil,   nil,   nil,   126,   nil,   nil,   nil,
+    68,    45,   nil,   nil,   186,    61,    64,   nil,    63,   229,
+   nil,    45,    71,   nil,   186,   nil,   nil,   126,    63,   229,
+   nil,    68,    71,    61,    64,   nil,   231,   126,   nil,   nil,
+   nil,    68,    45,   nil,   nil,    51,   nil,    61,    64,    63,
+    66,   nil,    45,    71,   nil,   nil,   nil,    55,    58,   nil,
+   nil,   nil,    68,   186,   nil,    61,    64,    63,   229,   312,
+   nil,    71,   nil,    45,   nil,   nil,   126,   186,   nil,   nil,
+    68,    63,   229,   nil,   nil,    71,    61,    64,   nil,   nil,
+   126,    45,   nil,   nil,    68,   186,   nil,   nil,   nil,    63,
+   229,   nil,   nil,    71,   nil,    45,   236,   nil,   126,   nil,
+   nil,   nil,    68,   nil,   nil,   nil,    51,    61,    64,   nil,
+    63,    66,   nil,    45,    71,   nil,   nil,   nil,    55,    58,
+   nil,   nil,   nil,    68,   nil,   nil,   nil,   143,   nil,   nil,
+   nil,   nil,   nil,   nil,    45,   nil,   nil,    51,   165,   nil,
+   nil,    63,    66,   nil,   nil,    71,   nil,   158,   163,    55,
+    58,   nil,   nil,   nil,    68,   nil,   154,   156,   159,   162,
+   158,   163,   nil,   nil,   nil,    45,   nil,   nil,   nil,   154,
+   156,   159,   162,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   157,   161,   nil,   nil,   166,   167,   168,   152,   153,   155,
+   nil,   160,   164,   157,   161,   nil,   nil,   166,   167,   168,
+   152,   153,   155,   nil,   160,   164,   158,   163,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   154,   156,   159,   162,   158,
+   163,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   154,   156,
+   159,   162,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   166,   167,   168,   152,   153,   155,   nil,
+   160,   164,   nil,   161,   nil,   nil,   166,   167,   168,   152,
+   153,   155,   nil,   160,   164,   158,   163,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   154,   156,   159,   162,   158,   163,
+   nil,   nil,   nil,   nil,   nil,   nil,   238,   154,   156,   159,
+   162,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   157,   161,
+   nil,   nil,   166,   167,   168,   152,   153,   155,   nil,   160,
+   164,   157,   161,   nil,   nil,   166,   167,   168,   152,   153,
+   155,   354,   160,   164,   158,   163,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   154,   156,   159,   162,   nil,   nil,   nil,
+   nil,   nil,    19,   nil,    23,    27,   nil,     1,     5,   335,
+    12,   nil,    17,   nil,    21,   nil,    28,   157,   161,     4,
+     9,   166,   167,   168,   152,   153,   155,   nil,   160,   164,
+    19,   334,    23,    27,   nil,     1,     5,   nil,    12,   nil,
+    17,   nil,    21,   nil,    28,   nil,   nil,     4,     9,   nil,
+   349,   nil,    19,   nil,    23,    27,   nil,     1,     5,   nil,
+    12,   nil,    17,   nil,    21,   nil,    28,   nil,   nil,     4,
+     9,    19,   252,    23,    27,   nil,     1,     5,   nil,    12,
+   nil,    17,   nil,    21,   nil,    28,   nil,   nil,     4,     9,
+   nil,   306,   nil,    19,   nil,    23,    27,   nil,     1,     5,
+   nil,    12,   nil,    17,   nil,    21,   nil,    28,   nil,   nil,
+     4,     9,    19,   284,    23,    27,   nil,     1,     5,   nil,
+    12,   nil,    17,   nil,    21,   nil,    28,   nil,   nil,     4,
+     9,   nil,   286,   nil,    19,   nil,    23,    27,   nil,     1,
+     5,   nil,    12,   nil,    17,   nil,    21,   nil,    28,   nil,
+   nil,     4,     9,    19,   356,    23,    27,   nil,     1,     5,
+   nil,    12,   nil,    17,   nil,    21,   nil,    28,   nil,   nil,
+     4,     9,   nil,   357,   nil,    19,   nil,    23,    27,   nil,
+     1,     5,   nil,    12,   nil,    17,   nil,    21,   nil,    28,
+   nil,   nil,     4,     9,    19,   nil,    23,    27,   nil,     1,
+     5,   nil,    12,   nil,    17,   nil,    21,   nil,    28,   nil,
+   nil,     4,     9,    19,   nil,    23,    27,   nil,     1,     5,
+   nil,    12,   nil,    17,   nil,    21,   nil,    28,   nil,   nil,
+     4,     9,    19,   nil,    23,    27,   nil,     1,     5,   nil,
+    12,   nil,    17,   nil,    21,   nil,    28,   nil,   nil,     4,
+     9 ]
 
 racc_action_check = [
-    46,    46,    46,    22,    22,   184,   146,   146,   146,   232,
-   146,   113,   113,   276,   136,    45,   210,   210,   210,   259,
-   210,    23,   232,   115,   115,    23,   276,   259,   256,   256,
-   140,    46,   256,   184,   184,    46,    46,   146,    23,    46,
-    45,   146,   146,   140,    46,   146,   113,   210,    46,   113,
-   146,   210,   210,    62,   146,   210,   136,   266,   115,    46,
-   210,   115,    23,   256,   210,   146,    89,    89,    89,   113,
-    89,   327,   188,    62,   100,   210,   327,   128,    11,    11,
-   188,   115,   266,   266,   267,   100,    89,   138,   138,   138,
-   100,   138,    84,    84,    97,   267,    84,    89,   194,   123,
-   267,    89,    89,   194,   101,    89,   205,   205,   205,    96,
-    89,    89,   123,    11,    89,   101,    11,    89,   138,   204,
-   101,   171,   138,   138,   171,    89,   138,    84,   226,   226,
-   226,   138,   226,   183,    94,   138,    11,   205,    16,    16,
-    16,   205,   205,    92,   183,   205,   138,   143,    30,   183,
-   205,   143,   143,     5,   205,    30,    30,   207,    16,   226,
-     5,   208,   245,   226,   226,   205,   209,   226,   110,    16,
-   245,   110,   226,    16,    16,   110,   226,    16,    26,   166,
-    91,    16,    16,   166,   166,    26,    16,   226,    18,    18,
-    18,   192,    18,   252,   252,   192,   192,    16,   245,   245,
-   245,   245,   245,   245,   211,   245,   245,   212,    18,    20,
-    20,    20,   213,    20,    90,   251,   251,   177,   177,    18,
-   251,   251,   241,    18,    18,   235,   235,    18,     1,     1,
-   241,   217,    18,    18,   297,   297,    18,   250,   250,    18,
-    20,   220,   250,   250,    20,    20,    88,    18,    20,    87,
-   148,   148,   148,    20,   148,   107,   233,    20,   241,   241,
-   241,   241,   241,   241,   103,   241,   241,   111,    20,    99,
-   148,   149,   149,   149,   116,   149,   238,   238,   238,   238,
-    85,   148,    78,   238,   238,   148,   148,    74,   179,   148,
-    73,   149,   179,   179,   148,   148,    70,    69,   148,   119,
-   248,   148,   149,    68,   156,   122,   149,   149,   102,   148,
-   149,   254,   239,    66,    65,   149,   149,   124,    58,   149,
-   239,   263,   149,   328,   328,   328,   265,   328,    55,   125,
-   149,    53,    52,   324,   324,   324,   274,   324,   275,    98,
-    98,    98,   126,    98,   278,    48,    47,    35,   239,   239,
-   239,   239,   239,   239,   328,   239,   239,   289,   328,   328,
-   195,   181,   328,   301,   324,   303,   308,   328,   324,   324,
-    98,   328,   324,    27,    98,    98,   312,   324,    98,   317,
-   318,   324,   328,    98,   150,   150,   150,    98,   150,   320,
-   321,   322,   324,   236,   236,   236,   236,   129,    98,   180,
-   236,   236,    25,   178,   150,   295,   295,   295,    15,   295,
-   336,   337,    12,   137,   174,   150,   160,   nil,   242,   150,
-   150,   nil,   nil,   150,   nil,   nil,   242,   nil,   150,   150,
-   nil,   nil,   150,   nil,   nil,   150,   295,   nil,   nil,   nil,
-   295,   295,   nil,   150,   295,   nil,    33,    33,    33,   295,
-    33,   nil,   nil,   295,   242,   242,   242,   242,   242,   242,
-   nil,   242,   242,   nil,   295,   nil,    33,    34,    34,    34,
-   nil,    34,   nil,   nil,   nil,   nil,   nil,    33,   nil,   nil,
-   nil,    33,    33,   nil,   nil,    33,   nil,    34,   nil,   nil,
-    33,    33,   nil,   nil,    33,   nil,   nil,    33,    34,   nil,
-   nil,   nil,    34,    34,   nil,    33,    34,   nil,   nil,   nil,
-   nil,    34,    34,   nil,   nil,    34,   nil,   nil,    34,   151,
-   151,   151,   nil,   151,   nil,   nil,    34,   246,   246,   246,
-   246,   246,   246,   nil,   246,   246,   nil,   nil,   nil,   151,
-   152,   152,   152,   nil,   152,   nil,   nil,   nil,   nil,   nil,
-   151,   nil,   nil,   nil,   151,   151,   nil,   nil,   151,   nil,
-   152,   nil,   nil,   151,   151,   nil,   nil,   151,   nil,   nil,
-   151,   152,   nil,   nil,   nil,   152,   152,   nil,   151,   152,
-   nil,   nil,   nil,   nil,   152,   152,   nil,   nil,   152,   nil,
-   nil,   152,   153,   153,   153,   nil,   153,   nil,   nil,   152,
-   237,   237,   237,   237,   237,   237,   nil,   237,   237,   nil,
-   nil,   nil,   153,   154,   154,   154,   nil,   154,   nil,   nil,
-   nil,   nil,   nil,   153,   nil,   nil,   nil,   153,   153,   nil,
-   nil,   153,   nil,   154,   nil,   nil,   153,   153,   nil,   nil,
-   153,   nil,   nil,   153,   154,   nil,   nil,   nil,   154,   154,
-   nil,   153,   154,   nil,   nil,   nil,   nil,   154,   154,   nil,
-   nil,   154,   nil,   nil,   154,    82,    82,    82,   nil,    82,
-   nil,   nil,   154,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,    82,    79,    79,    79,    79,
-    79,   nil,   nil,   nil,   nil,   nil,    82,   nil,   nil,   nil,
-    82,    82,   nil,   nil,    82,   nil,   nil,   nil,   nil,    82,
-    82,   nil,   nil,    82,   nil,   nil,    82,    79,   nil,   nil,
-   nil,    79,    79,   nil,    82,    79,   nil,   162,   162,   162,
-    79,   162,   nil,   nil,    79,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,    79,   nil,   162,    54,    54,
-    54,   nil,    54,   nil,   nil,   nil,   nil,   nil,   162,   nil,
-   nil,   nil,   162,   162,   nil,   nil,   162,   nil,   nil,   nil,
-   nil,   162,   162,   nil,   nil,   162,   nil,   nil,   162,    54,
-   nil,   nil,   nil,    54,    54,   nil,   162,    54,   nil,   155,
-   155,   155,    54,   155,   nil,   nil,    54,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,    54,   nil,   155,
-   164,   164,   164,   nil,   164,   nil,   nil,   nil,   nil,   nil,
-   155,   nil,   nil,   nil,   155,   155,   nil,   nil,   155,   nil,
-   164,   nil,   nil,   155,   155,   nil,   nil,   155,   nil,   nil,
-   155,   164,   nil,   nil,   nil,   164,   164,   nil,   155,   164,
-   nil,   nil,   nil,   nil,   164,   164,   nil,   nil,   164,   nil,
-   nil,   164,   157,   157,   157,   nil,   157,   nil,   nil,   164,
+    92,    92,    92,   270,    92,   260,   260,   141,   187,   260,
+   192,   279,    12,    12,   280,   184,    48,   199,   192,   187,
+    92,   145,   145,   145,   187,   145,    24,   280,   270,   270,
+    24,    92,    89,   119,   119,    92,    92,   121,   121,    92,
+   260,    48,    88,    24,    92,    92,   209,    12,    92,   141,
+    12,    92,   145,    66,    87,    87,   145,   145,    87,    92,
+   145,   237,   152,   152,   152,   145,   152,    24,   119,   145,
+    12,   119,   121,    66,   237,   121,   188,   144,   264,   128,
+   145,   182,   152,   153,   153,   153,   264,   153,     1,    87,
+   144,   119,   128,   152,    81,   121,   212,   152,   152,     1,
+     1,   152,   213,   153,   188,   188,   152,   152,   245,   104,
+   152,   214,   176,   152,   153,   176,   245,    27,   153,   153,
+   104,   152,   153,   114,    27,   104,   114,   153,   153,    77,
+   114,   153,   216,    31,   153,   154,   154,   154,   217,   154,
+    31,    31,   153,   271,   245,   245,   245,   245,   245,   245,
+    75,   245,   245,   103,   271,   154,   155,   155,   155,   271,
+   155,     5,   330,   220,   103,    73,   154,   330,     5,   103,
+   154,   154,   255,   255,   154,   226,   155,   255,   255,   154,
+   154,   243,   229,   154,    72,   198,   154,   155,    91,   243,
+   198,   155,   155,   178,   154,   155,    93,   246,   147,    94,
+   155,   155,   147,   147,   155,   246,    95,   155,   156,   156,
+   156,    70,   156,    23,    23,   155,    69,   243,   243,   243,
+   243,   243,   243,    97,   243,   243,   239,   239,   156,    17,
+    17,    17,    62,   246,   246,   246,   246,   246,   246,   156,
+   246,   246,    60,   156,   156,    58,   249,   156,   164,    17,
+   181,   181,   156,   156,   249,   252,   156,   254,   254,   156,
+    17,    56,   254,   254,    17,    17,   196,   156,    17,    99,
+   196,   196,    17,    17,    19,    19,    19,    17,    19,   302,
+   302,   100,   249,   249,   249,   249,   249,   249,    17,   249,
+   249,   256,   256,   102,    19,    21,    21,    21,   258,    21,
+   240,   240,   240,   240,   160,    19,    54,   240,   240,    19,
+    19,   170,    51,    19,   105,   170,   170,   267,    19,    19,
+   269,   106,    19,   183,   110,    19,    21,   183,   183,    50,
+    21,    21,   111,    19,    21,   278,   331,   331,   331,    21,
+   331,   185,   115,    21,   281,    37,   157,   157,   157,   118,
+   157,   123,   293,    28,    21,   241,   241,   241,   241,   241,
+   241,   127,   241,   241,   304,   306,   157,   331,   313,   129,
+   315,   331,   331,   320,   321,   331,   323,   157,   324,   325,
+   331,   157,   157,    26,   331,   157,   142,   130,    16,    13,
+   157,   157,   283,   339,   157,   331,   340,   157,   327,   327,
+   327,     6,   327,   134,   133,   157,   131,   nil,   158,   158,
+   158,   nil,   158,   283,   nil,   283,   283,   nil,   283,   283,
+   nil,   283,   nil,   283,   nil,   283,   nil,   283,   158,   327,
+   283,   283,   nil,   327,   327,   nil,   nil,   327,   nil,   158,
+   nil,   nil,   327,   158,   158,   nil,   327,   158,   nil,   nil,
+   nil,   nil,   158,   158,   341,   nil,   158,   327,   nil,   158,
+   300,   300,   300,   nil,   300,   nil,   nil,   158,   nil,   nil,
+   159,   159,   159,   nil,   159,   341,   nil,   341,   341,   nil,
+   341,   341,   nil,   341,   nil,   341,   nil,   341,   nil,   341,
+   159,   300,   341,   341,   nil,   300,   300,   nil,   nil,   300,
+   nil,   159,   nil,   nil,   300,   159,   159,   nil,   300,   159,
+   nil,   nil,   nil,   nil,   159,   159,   nil,   nil,   159,   300,
+   nil,   159,   161,   161,   161,   nil,   161,   nil,   nil,   159,
+   242,   242,   242,   242,   nil,   nil,   nil,   242,   242,   nil,
+   nil,   nil,   161,    34,    34,    34,   nil,    34,   nil,   nil,
+   nil,   nil,   nil,   161,   nil,   nil,   nil,   161,   161,   nil,
+   nil,   161,   nil,   nil,   nil,   nil,   161,   161,   nil,   nil,
+   161,   nil,   nil,   161,    34,   nil,   nil,   nil,    34,    34,
+   nil,   161,    34,   nil,    35,    35,    35,    34,    35,   nil,
+   nil,    34,   250,   250,   250,   250,   250,   250,   nil,   250,
+   250,   nil,    34,   nil,    35,   222,   222,   222,   nil,   222,
+   nil,   nil,   nil,   nil,   nil,    35,   nil,   nil,   nil,    35,
+    35,   nil,   nil,    35,   nil,   nil,   nil,   nil,    35,    35,
+   nil,   nil,    35,   nil,   nil,    35,   222,   nil,   nil,   nil,
+   222,   222,   nil,    35,   222,   nil,   101,   101,   101,   222,
+   101,   nil,   nil,   222,   nil,   nil,    39,    39,    39,   nil,
+    39,   nil,   nil,   nil,   222,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,    39,   101,   nil,   nil,
+   nil,   101,   101,   nil,   nil,   101,   nil,    39,   nil,   nil,
+   101,    39,    39,   nil,   101,    39,   nil,   nil,   nil,   nil,
+    39,    39,   nil,   nil,    39,   101,   nil,    39,   162,   162,
+   162,   nil,   162,   nil,   nil,    39,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   162,    49,
+    49,    49,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   162,
+   nil,   nil,   nil,   162,   162,   nil,   nil,   162,   nil,   nil,
+   nil,   nil,   162,   162,   nil,   nil,   162,   nil,   nil,   162,
+    49,   nil,   nil,   nil,    49,    49,   nil,   162,    49,   nil,
+   163,   163,   163,    49,   163,   nil,   nil,    49,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    49,   nil,
+   163,   166,   166,   166,   nil,   166,   nil,   nil,   nil,   nil,
+   nil,   163,   nil,   nil,   nil,   163,   163,   nil,   nil,   163,
+   nil,   166,   nil,   nil,   163,   163,   nil,   nil,   163,   nil,
+   nil,   163,   166,   nil,   nil,   nil,   166,   166,   nil,   163,
+   166,   nil,   nil,   nil,   nil,   166,   166,   nil,   nil,   166,
+   nil,   nil,   166,   167,   167,   167,   nil,   167,   nil,   nil,
+   166,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   167,   261,   261,   261,   nil,   261,   nil,
+   nil,   nil,   nil,   nil,   167,   nil,   nil,   nil,   167,   167,
+   nil,   nil,   167,   nil,   nil,   nil,   nil,   167,   167,   nil,
+   nil,   167,   nil,   nil,   167,   261,   nil,   nil,   nil,   261,
+   261,   nil,   167,   261,   nil,   168,   168,   168,   261,   168,
+   nil,   nil,   261,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   261,   nil,   168,    57,    57,    57,   nil,
+    57,   nil,   210,   210,   210,   nil,   168,   nil,   nil,   nil,
+   168,   168,   nil,   nil,   168,   nil,   nil,   nil,   nil,   168,
+   168,   nil,   nil,   168,   nil,   nil,   168,    57,   nil,   nil,
+   nil,    57,    57,   210,   168,    57,   nil,   210,   210,   nil,
+    57,   210,   nil,   nil,    57,   nil,   210,    84,    84,    84,
+   210,    84,   nil,   nil,   nil,    57,   nil,   nil,   nil,   nil,
+   nil,   210,   nil,   nil,   nil,   nil,   nil,    84,    82,    82,
+    82,    82,    82,   nil,   nil,   nil,   nil,   nil,    84,   nil,
+   nil,   nil,    84,    84,   nil,   nil,    84,   nil,   nil,   nil,
+   nil,    84,    84,   nil,   nil,    84,   nil,   nil,    84,    82,
+   nil,   nil,   nil,    82,    82,   nil,    84,    82,   nil,   211,
+   211,   211,    82,   211,   nil,   nil,    82,   nil,   nil,    78,
+    78,    78,   nil,    78,   nil,   nil,   nil,    82,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    78,
+   211,   nil,   nil,   nil,   211,   211,   nil,   nil,   211,   nil,
+    78,   nil,   nil,   211,    78,    78,   nil,   211,    78,   nil,
+   nil,   nil,   nil,    78,    78,   nil,   nil,    78,   211,   nil,
+    78,   215,   215,   215,   nil,   215,   nil,   nil,    78,   nil,
+   nil,    36,    36,    36,   nil,    36,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   157,   257,   257,   257,   nil,   257,   nil,   nil,
-   nil,   nil,   nil,   157,   nil,   nil,   nil,   157,   157,   nil,
-   nil,   157,   nil,   nil,   nil,   nil,   157,   157,   nil,   nil,
-   157,   nil,   nil,   157,   257,   nil,   nil,   nil,   257,   257,
-   nil,   157,   257,   nil,   158,   158,   158,   257,   158,   nil,
-   nil,   257,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   257,   nil,   158,   163,   163,   163,   nil,   163,
-   nil,   nil,   nil,   nil,   nil,   158,   nil,   nil,   nil,   158,
-   158,   nil,   nil,   158,   nil,   163,   nil,   nil,   158,   158,
-   nil,   nil,   158,   nil,   nil,   158,   163,   nil,   nil,   nil,
-   163,   163,   nil,   158,   163,   nil,   nil,   nil,   nil,   163,
-   163,   nil,   nil,   163,   nil,   nil,   163,    75,    75,    75,
-   nil,    75,   nil,   nil,   163,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,    75,   159,   159,
-   159,   nil,   159,   nil,   nil,   nil,   nil,   nil,    75,   nil,
-   nil,   nil,    75,    75,   nil,   nil,    75,   nil,   159,   nil,
-   nil,    75,    75,   nil,   nil,    75,   261,   261,    75,   159,
-   261,   nil,   nil,   159,   159,   nil,    75,   159,   nil,   nil,
-   nil,   nil,   159,   159,   nil,   nil,   159,   nil,   nil,   159,
-   206,   206,   206,   nil,   206,   nil,   261,   159,   145,   145,
-   261,   261,   nil,   nil,   261,   nil,   nil,   nil,   nil,   261,
-   nil,   nil,   nil,   261,   nil,   nil,   272,   272,   145,   nil,
-   nil,   206,   nil,   nil,   261,   206,   206,   nil,   145,   206,
-   nil,   nil,   145,   145,   206,   nil,   145,   nil,   206,   nil,
-   145,   145,    50,    50,   nil,   145,   272,   nil,   nil,   206,
-   272,   272,   176,   176,   272,   nil,   145,   nil,   nil,   272,
-   nil,   nil,    50,   272,   nil,   nil,   nil,   nil,   309,   309,
-   nil,   nil,    50,   nil,   272,   nil,    50,    50,   335,   335,
-    50,   nil,   176,   nil,    50,    50,   176,   176,   nil,    50,
-   176,   nil,   nil,   nil,   nil,   176,   nil,   nil,   309,   176,
-    50,   nil,   309,   309,   222,   222,   309,   nil,   335,   nil,
-   176,   309,   335,   335,   nil,   309,   335,   nil,   nil,   nil,
-   nil,   335,   nil,   215,   215,   335,   309,   nil,   nil,   141,
-   141,   nil,   141,   nil,   222,   nil,   335,   nil,   222,   222,
-   nil,   nil,   222,   215,   nil,   271,   271,   222,   nil,   nil,
-   nil,   222,   nil,   215,   nil,   144,   144,   215,   215,   141,
-   nil,   215,   222,   141,   141,   215,   215,   141,   nil,   nil,
-   215,   nil,   141,   nil,   nil,   271,   141,   nil,   nil,   271,
-   271,   215,   nil,   271,   nil,   144,    76,   141,   271,   144,
-   144,   nil,   271,   144,   nil,    76,    76,   144,   144,   nil,
-   nil,   nil,   144,   271,    76,    76,    76,    76,   109,   109,
-   nil,   nil,   nil,   144,   nil,   nil,   nil,   109,   109,   109,
-   109,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    76,    76,
-   nil,   nil,    76,    76,    76,    76,    76,    76,   nil,    76,
-    76,   109,   109,   nil,   nil,   109,   109,   109,   109,   109,
-   109,   nil,   109,   109,   147,   147,   nil,   nil,   nil,   nil,
-   nil,   nil,   147,   147,   147,   147,   147,   108,   108,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   108,   108,   108,   108,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   147,   147,   nil,
-   nil,   147,   147,   147,   147,   147,   147,   nil,   147,   147,
-   108,   108,   nil,   nil,   108,   108,   108,   108,   108,   108,
-   nil,   108,   108,   244,   244,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   244,   244,   244,   244,   240,   240,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   240,   240,   240,   240,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   244,   244,   244,   244,   244,   244,   338,   244,   244,   nil,
-   240,   nil,   nil,   240,   240,   240,   240,   240,   240,   nil,
-   240,   240,   nil,   nil,   nil,   350,   nil,   338,   nil,   338,
-   338,   nil,   338,   338,   nil,   338,   nil,   338,   nil,   338,
-   nil,   338,   nil,   nil,   338,   338,   350,   249,   350,   350,
-   nil,   350,   350,   nil,   350,   nil,   350,   nil,   350,   nil,
-   350,   nil,   nil,   350,   350,   nil,   161,   nil,   249,   nil,
-   249,   249,   nil,   249,   249,   nil,   249,   nil,   249,   nil,
-   249,   nil,   249,   nil,   nil,   249,   249,   161,   200,   161,
-   161,   nil,   161,   161,   nil,   161,   nil,   161,   nil,   161,
-   nil,   161,   nil,   nil,   161,   161,   nil,   340,   nil,   200,
-   nil,   200,   200,   nil,   200,   200,   nil,   200,   nil,   200,
-   nil,   200,   nil,   200,   nil,   nil,   200,   200,   340,   279,
-   340,   340,   nil,   340,   340,   nil,   340,   nil,   340,   nil,
-   340,   nil,   340,   nil,   nil,   340,   340,   nil,   281,   nil,
-   279,   nil,   279,   279,   nil,   279,   279,   nil,   279,   nil,
-   279,   nil,   279,   nil,   279,   nil,   nil,   279,   279,   281,
-   330,   281,   281,   nil,   281,   281,   nil,   281,   nil,   281,
-   nil,   281,   nil,   281,   nil,   nil,   281,   281,   nil,   283,
-   nil,   330,   nil,   330,   330,   nil,   330,   330,   nil,   330,
-   nil,   330,   nil,   330,   nil,   330,   nil,   nil,   330,   330,
-   283,   203,   283,   283,   nil,   283,   283,   nil,   283,   nil,
-   283,   nil,   283,   nil,   283,   nil,   nil,   283,   283,   nil,
-   352,   nil,   203,   nil,   203,   203,   nil,   203,   203,   nil,
-   203,   nil,   203,   nil,   203,   nil,   203,   nil,   nil,   203,
-   203,   352,   nil,   352,   352,   nil,   352,   352,   nil,   352,
-   nil,   352,   nil,   352,   nil,   352,   nil,   nil,   352,   352,
-    29,   nil,    29,    29,   nil,    29,    29,   nil,    29,   nil,
-    29,   nil,    29,   nil,    29,   nil,   nil,    29,    29,     0,
-   nil,     0,     0,   nil,     0,     0,   nil,     0,   nil,     0,
-   nil,     0,   nil,     0,   nil,   nil,     0,     0 ]
+   nil,    36,   215,   231,   231,   nil,   215,   215,   nil,   nil,
+   215,   nil,    36,   nil,   nil,   215,    36,    36,   nil,   215,
+    36,   nil,   219,   219,   nil,    36,    36,   nil,   nil,    36,
+   215,   nil,    36,   231,   nil,   nil,   nil,   231,   231,   nil,
+    36,   231,   219,   338,   338,   nil,   231,   nil,   nil,   nil,
+   231,   nil,   219,   314,   314,   nil,   219,   219,   nil,   nil,
+   219,   231,   nil,   nil,   219,   219,   nil,   nil,   nil,   219,
+   nil,   nil,   nil,   338,   276,   276,   nil,   338,   338,   nil,
+   219,   338,   nil,   314,   275,   275,   338,   314,   314,   nil,
+   338,   314,   nil,   nil,   nil,   nil,   314,   nil,   nil,   nil,
+   314,   338,   nil,   nil,   276,   149,   149,   nil,   276,   276,
+   nil,   314,   276,   nil,   275,   nil,   nil,   276,   275,   275,
+   nil,   276,   275,   148,   148,   nil,   148,   275,   nil,   nil,
+   nil,   275,   276,   nil,   nil,   149,   nil,   180,   180,   149,
+   149,   nil,   275,   149,   nil,   nil,   nil,   149,   149,   nil,
+   nil,   nil,   149,   148,   nil,   262,   262,   148,   148,   262,
+   nil,   148,   nil,   149,   nil,   nil,   148,   180,   nil,   nil,
+   148,   180,   180,   nil,   nil,   180,   150,   150,   nil,   nil,
+   180,   148,   nil,   nil,   180,   262,   nil,   nil,   nil,   262,
+   262,   nil,   nil,   262,   nil,   180,   150,   nil,   262,   nil,
+   nil,   nil,   262,   nil,   nil,   nil,   150,    53,    53,   nil,
+   150,   150,   nil,   262,   150,   nil,   nil,   nil,   150,   150,
+   nil,   nil,   nil,   150,   nil,   nil,   nil,    53,   nil,   nil,
+   nil,   nil,   nil,   nil,   150,   nil,   nil,    53,    79,   nil,
+   nil,    53,    53,   nil,   nil,    53,   nil,    79,    79,    53,
+    53,   nil,   nil,   nil,    53,   nil,    79,    79,    79,    79,
+   113,   113,   nil,   nil,   nil,    53,   nil,   nil,   nil,   113,
+   113,   113,   113,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+    79,    79,   nil,   nil,    79,    79,    79,    79,    79,    79,
+   nil,    79,    79,   113,   113,   nil,   nil,   113,   113,   113,
+   113,   113,   113,   nil,   113,   113,   248,   248,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   248,   248,   248,   248,   244,
+   244,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   244,   244,
+   244,   244,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   248,   248,   248,   248,   248,   248,   nil,
+   248,   248,   nil,   244,   nil,   nil,   244,   244,   244,   244,
+   244,   244,   nil,   244,   244,   112,   112,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   112,   112,   112,   112,   151,   151,
+   nil,   nil,   nil,   nil,   nil,   nil,   151,   151,   151,   151,
+   151,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   112,   112,
+   nil,   nil,   112,   112,   112,   112,   112,   112,   nil,   112,
+   112,   151,   151,   nil,   nil,   151,   151,   151,   151,   151,
+   151,   343,   151,   151,   117,   117,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   117,   117,   117,   117,   nil,   nil,   nil,
+   nil,   nil,   343,   nil,   343,   343,   nil,   343,   343,   287,
+   343,   nil,   343,   nil,   343,   nil,   343,   117,   117,   343,
+   343,   117,   117,   117,   117,   117,   117,   nil,   117,   117,
+   287,   285,   287,   287,   nil,   287,   287,   nil,   287,   nil,
+   287,   nil,   287,   nil,   287,   nil,   nil,   287,   287,   nil,
+   333,   nil,   285,   nil,   285,   285,   nil,   285,   285,   nil,
+   285,   nil,   285,   nil,   285,   nil,   285,   nil,   nil,   285,
+   285,   333,   165,   333,   333,   nil,   333,   333,   nil,   333,
+   nil,   333,   nil,   333,   nil,   333,   nil,   nil,   333,   333,
+   nil,   253,   nil,   165,   nil,   165,   165,   nil,   165,   165,
+   nil,   165,   nil,   165,   nil,   165,   nil,   165,   nil,   nil,
+   165,   165,   253,   205,   253,   253,   nil,   253,   253,   nil,
+   253,   nil,   253,   nil,   253,   nil,   253,   nil,   nil,   253,
+   253,   nil,   206,   nil,   205,   nil,   205,   205,   nil,   205,
+   205,   nil,   205,   nil,   205,   nil,   205,   nil,   205,   nil,
+   nil,   205,   205,   206,   353,   206,   206,   nil,   206,   206,
+   nil,   206,   nil,   206,   nil,   206,   nil,   206,   nil,   nil,
+   206,   206,   nil,   355,   nil,   353,   nil,   353,   353,   nil,
+   353,   353,   nil,   353,   nil,   353,   nil,   353,   nil,   353,
+   nil,   nil,   353,   353,   355,   nil,   355,   355,   nil,   355,
+   355,   nil,   355,   nil,   355,   nil,   355,   nil,   355,   nil,
+   nil,   355,   355,     0,   nil,     0,     0,   nil,     0,     0,
+   nil,     0,   nil,     0,   nil,     0,   nil,     0,   nil,   nil,
+     0,     0,    30,   nil,    30,    30,   nil,    30,    30,   nil,
+    30,   nil,    30,   nil,    30,   nil,    30,   nil,   nil,    30,
+    30 ]
 
 racc_action_pointer = [
-  1691,   215,   nil,   nil,   nil,   115,   nil,   nil,   nil,   nil,
-   nil,    75,   406,   nil,   nil,   402,   136,   nil,   186,   nil,
-   207,   nil,     0,    19,   nil,   402,   140,   331,   nil,  1672,
-   110,   nil,   nil,   444,   465,   312,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,     5,    -2,   308,   343,   nil,
-  1119,   nil,   311,   310,   746,   326,   nil,   nil,   308,   nil,
-   nil,   nil,    51,   nil,   nil,   293,   292,   nil,   301,   276,
-   294,   nil,   nil,   269,   266,   995,  1260,   nil,   261,   684,
-   nil,   nil,   663,   nil,    89,   259,   nil,   228,   225,    64,
-   193,   159,   122,   nil,   128,   nil,    99,    88,   337,   231,
-    52,    82,   308,   242,   nil,   nil,   nil,   249,  1332,  1273,
-   130,   261,   nil,     8,   nil,    20,   268,   nil,   nil,   278,
-   nil,   nil,   266,    90,   296,   319,   321,   nil,    56,   379,
-   nil,   nil,   nil,   nil,   nil,   nil,     5,   403,    85,   nil,
-    20,  1206,   nil,   142,  1232,  1075,     4,  1319,   248,   269,
-   382,   517,   538,   590,   611,   787,   243,   860,   922,  1016,
-   355,  1489,   725,   943,   808,   nil,   174,   nil,   nil,   nil,
-   nil,   114,   nil,   nil,   405,   nil,  1129,   214,   365,   283,
-   390,   351,   nil,   111,   -15,   nil,   nil,   nil,    56,   nil,
-   nil,   nil,   147,   nil,    65,   354,   nil,   nil,   nil,   nil,
-  1511,   nil,   nil,  1634,   112,   104,  1068,   150,   123,   128,
-    14,   197,   169,   207,   nil,  1200,   nil,   222,   nil,   nil,
-   219,   nil,  1181,   nil,   nil,   nil,   126,   nil,   nil,   nil,
-   nil,   nil,    -1,   251,   nil,   166,   341,   548,   224,   296,
-  1391,   206,   402,   nil,  1378,   146,   475,   nil,   271,  1470,
-   183,   161,   134,   nil,   306,   nil,    25,   881,   nil,     9,
-   nil,  1043,   nil,   311,   nil,   319,    34,    62,   nil,   nil,
-   nil,  1222,  1093,   nil,   323,   315,     3,   nil,   331,  1552,
-   nil,  1571,   nil,  1612,   nil,   nil,   nil,   nil,   nil,   347,
-   nil,   nil,   nil,   nil,   nil,   403,   nil,   225,   nil,   nil,
-   nil,   357,   nil,   336,   nil,   nil,   nil,   nil,   360,  1145,
-   nil,   nil,   369,   nil,   nil,   nil,   nil,   358,   359,   nil,
-   368,   369,   370,   nil,   331,   nil,   nil,    38,   321,   nil,
-  1593,   nil,   nil,   nil,   nil,  1155,   403,   404,  1429,   nil,
-  1530,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-  1448,   nil,  1653,   nil,   nil ]
+  1755,    86,   nil,   nil,   nil,   123,   388,   nil,   nil,   nil,
+   nil,   nil,     9,   383,   nil,   nil,   382,   227,   nil,   272,
+   nil,   293,   nil,   210,    24,   nil,   383,    79,   311,   nil,
+  1774,    95,   nil,   nil,   541,   582,  1109,   310,   nil,   654,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,     6,   727,
+   291,   310,   nil,  1334,   304,   nil,   240,   924,   243,   nil,
+   221,   nil,   222,   nil,   nil,   nil,    51,   nil,   nil,   195,
+   190,   nil,   182,   144,   nil,   129,   nil,   108,  1047,  1362,
+   nil,    73,   996,   nil,   975,   nil,   nil,    51,    21,    11,
+   nil,   167,    -2,   175,   178,   185,   nil,   217,   nil,   259,
+   275,   644,   255,   131,    87,   314,   299,   nil,   nil,   nil,
+   318,   327,  1480,  1375,    85,   336,   nil,  1539,   343,    30,
+   nil,    34,   nil,   330,   nil,   nil,   nil,   322,    70,   348,
+   377,   385,   nil,   383,   385,   nil,   nil,   nil,   nil,   nil,
+   nil,    -2,   376,   nil,    67,    19,   nil,   193,  1250,  1232,
+  1303,  1493,    60,    81,   133,   154,   206,   344,   406,   468,
+   243,   520,   706,   768,   187,  1635,   789,   841,   903,   nil,
+   306,   nil,   nil,   nil,   nil,   nil,   105,   nil,   184,   nil,
+  1264,   247,    43,   318,     6,   331,   nil,   -14,    56,   nil,
+   nil,   nil,    -6,   nil,   nil,   nil,   222,   nil,   152,    11,
+   nil,   nil,   nil,   nil,   nil,  1676,  1695,   nil,   nil,    39,
+   930,  1037,    89,    64,    73,  1099,   125,   100,   nil,  1149,
+   158,   nil,   603,   nil,   nil,   nil,   166,   nil,   nil,   160,
+   nil,  1130,   nil,   nil,   nil,   nil,   nil,    51,   nil,   167,
+   248,   303,   478,   165,  1434,    92,   181,   nil,  1421,   230,
+   540,   nil,   226,  1654,   203,   118,   232,   nil,   293,   nil,
+     2,   862,  1282,   nil,    68,   nil,   nil,   307,   nil,   313,
+   -20,   121,   nil,   nil,   nil,  1211,  1201,   nil,   322,   -12,
+     4,   331,   nil,   385,   nil,  1594,   nil,  1572,   nil,   nil,
+   nil,   nil,   nil,   342,   nil,   nil,   nil,   nil,   nil,   nil,
+   458,   nil,   270,   nil,   358,   nil,   336,   nil,   nil,   nil,
+   nil,   nil,   nil,   362,  1180,   363,   nil,   nil,   nil,   nil,
+   352,   353,   nil,   355,   357,   358,   nil,   396,   nil,   nil,
+   129,   334,   nil,  1613,   nil,   nil,   nil,   nil,  1170,   386,
+   389,   447,   nil,  1544,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,  1717,   nil,  1736,   nil,   nil ]
 
 racc_action_default = [
-  -178,  -216,   -15,    -3,  -169,  -216,   -16,    -5,  -167,   -17,
-    -6,  -216,  -216,    -7,    -8,  -216,  -168,    -9,  -216,   -10,
-  -216,   -11,  -216,  -216,   -12,  -216,  -216,   -40,   -13,    -1,
-  -216,   -14,    -2,  -216,  -216,  -178,  -168,  -170,  -172,  -175,
-  -174,  -173,  -203,  -176,  -177,  -178,   -74,   -81,  -195,   -31,
-  -216,   -34,   -32,  -216,  -216,   -64,   -33,  -106,   -21,  -108,
-  -107,   -22,   -63,   -23,   -62,   -26,   -27,  -156,  -216,   -28,
-  -214,  -157,  -155,   -29,   -30,  -216,  -216,   -96,   -92,  -216,
-  -116,  -100,  -216,  -101,  -216,   -93,   -99,   -97,   -94,  -216,
-  -103,   -95,  -102,   -98,  -216,  -158,  -160,   -43,  -216,   -74,
-  -178,  -178,  -216,  -178,   -41,    -4,   -39,  -216,   -72,   -73,
-  -216,  -216,  -191,  -216,  -189,  -216,  -216,   -68,   -75,   -65,
-   -71,   -64,   -60,   -63,   -66,  -201,   -69,   -58,   -67,  -216,
-  -154,  -153,   -70,   -79,   -80,   -82,  -216,  -201,  -216,   -20,
-  -216,  -216,   -84,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
-  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,  -216,
-  -216,  -216,  -216,  -216,  -216,  -198,  -216,  -132,  -212,  -211,
-  -210,  -216,  -207,  -206,  -216,  -125,  -216,  -216,   -81,  -216,
-  -216,  -201,  -195,  -178,  -216,   -47,   -49,   -63,  -216,   -56,
-   -55,   -46,  -216,   355,  -179,  -216,  -180,  -193,  -192,  -194,
-  -216,  -190,  -171,  -216,  -216,   -61,  -216,  -216,  -202,   -74,
-  -216,  -216,  -202,  -216,   -18,  -216,  -151,  -216,  -143,  -144,
-   -63,  -149,  -216,  -152,  -150,  -109,  -216,  -199,  -200,   -24,
-   -25,  -105,  -216,  -216,  -135,  -121,  -123,  -127,  -124,  -129,
-  -134,  -131,  -128,  -117,  -133,  -130,  -126,  -118,  -113,  -216,
-  -119,  -120,  -122,  -196,  -200,  -204,  -216,  -216,  -137,  -216,
-  -141,  -216,  -159,  -201,  -110,  -216,  -216,  -216,   -52,   -51,
-   -45,  -216,  -216,   -44,  -188,  -216,  -216,  -183,  -186,  -216,
-  -164,  -216,  -166,  -216,   -35,   -59,   -77,   -36,   -76,  -201,
-   -78,   -38,   -83,  -213,   -19,  -216,  -146,  -201,   -85,  -104,
-  -215,  -216,  -112,  -113,  -197,  -208,  -205,  -209,  -216,  -216,
-  -138,  -136,  -216,   -37,   -50,   -48,   -90,   -86,   -87,   -53,
-   -91,   -88,   -89,   -54,  -216,  -181,  -182,  -216,  -216,  -162,
-  -216,  -163,  -165,   -57,  -148,  -216,  -216,  -200,  -216,  -111,
-  -216,  -142,   -42,  -187,  -184,  -185,  -161,  -147,  -145,  -115,
-  -216,  -140,  -216,  -114,  -139 ]
+  -179,  -217,   -15,    -3,  -170,  -217,  -217,   -16,    -5,  -168,
+   -17,    -6,  -217,  -217,    -7,    -8,  -217,  -169,    -9,  -217,
+   -10,  -217,   -11,  -217,  -217,   -12,  -217,  -217,   -40,   -13,
+    -1,  -217,   -14,    -2,  -217,  -217,  -217,  -179,  -169,  -217,
+  -171,  -173,  -176,  -175,  -174,  -204,  -177,  -178,  -179,   -75,
+   -82,  -196,   -31,  -217,  -215,   -34,   -32,  -217,   -64,   -33,
+  -217,  -107,   -21,  -109,  -108,   -22,   -63,   -23,   -62,   -26,
+   -27,  -157,  -217,   -28,  -156,   -29,  -158,   -30,  -217,  -217,
+   -97,   -93,  -217,  -101,  -217,  -117,  -102,  -217,   -94,   -98,
+  -100,   -95,  -217,  -104,   -96,  -103,   -99,  -217,  -159,  -161,
+   -43,  -217,   -75,  -179,  -179,  -217,  -179,   -41,    -4,   -39,
+  -217,  -217,   -72,   -74,  -217,  -217,  -192,   -73,  -217,  -217,
+  -190,  -217,   -68,   -65,   -76,   -71,   -64,   -60,   -63,   -66,
+  -202,   -69,   -58,   -67,  -217,  -155,  -154,   -70,   -80,   -81,
+   -83,  -217,  -202,   -20,  -217,  -217,   -85,  -217,  -217,  -217,
+  -217,  -217,  -217,  -217,  -217,  -217,  -217,  -217,  -217,  -217,
+  -217,  -217,  -217,  -217,  -217,  -217,  -217,  -217,  -217,  -199,
+  -217,  -133,  -213,  -212,  -211,  -207,  -217,  -208,  -217,  -126,
+  -217,  -217,   -82,  -217,  -217,  -202,  -196,  -179,  -217,   -47,
+   -49,   -63,  -217,   -56,   -55,   -46,  -217,   358,  -180,  -217,
+  -181,  -214,  -194,  -193,  -195,  -217,  -217,  -191,  -172,  -217,
+   -61,  -217,  -217,  -203,   -75,  -217,  -217,  -203,   -18,  -217,
+  -217,  -110,  -217,  -200,  -201,  -152,  -217,  -144,  -145,   -63,
+  -150,  -217,  -153,  -151,   -24,   -25,  -106,  -217,  -136,  -122,
+  -124,  -128,  -125,  -130,  -135,  -132,  -129,  -118,  -134,  -131,
+  -127,  -119,  -114,  -217,  -120,  -121,  -123,  -197,  -201,  -205,
+  -217,  -217,  -217,  -138,  -217,  -142,  -160,  -202,  -111,  -217,
+  -217,  -217,   -52,   -51,   -45,  -217,  -217,   -44,  -189,  -217,
+  -217,  -187,  -184,  -217,  -165,  -217,  -167,  -217,   -35,   -59,
+   -78,   -36,   -77,  -202,   -79,   -38,   -84,   -19,  -216,   -86,
+  -217,  -147,  -202,  -105,  -217,  -113,  -114,  -198,  -206,  -209,
+  -210,  -139,  -137,  -217,  -217,  -217,   -37,   -50,   -48,   -91,
+   -87,   -88,   -53,   -92,   -89,   -90,   -54,  -217,  -182,  -183,
+  -217,  -217,  -163,  -217,  -164,  -166,   -57,  -149,  -217,  -217,
+  -201,  -217,  -112,  -217,  -143,   -42,  -188,  -185,  -186,  -162,
+  -148,  -146,  -116,  -217,  -141,  -217,  -115,  -140 ]
 
 racc_goto_table = [
-    23,    29,   172,   105,   219,    15,   125,   277,    65,    37,
-    58,   127,   137,    72,   258,   217,    35,   132,   229,   184,
-   192,    63,   302,    32,   319,   323,    56,   207,   133,    23,
-   107,   204,   143,   335,    15,    49,   261,   103,   124,   211,
-   292,   106,    65,    72,   140,   218,   315,    72,   297,    96,
-   260,   195,   111,    45,   116,    63,   120,   166,   112,   181,
-    56,    97,   201,   275,   276,   117,   122,    52,   114,    49,
-   198,   171,    25,    95,   nil,   nil,   179,   339,   nil,   nil,
-   nil,   nil,   nil,   265,    44,   296,   nil,   nil,   nil,   229,
-   nil,   nil,   189,   189,   nil,   nil,   217,   119,   nil,   310,
-   nil,    52,   266,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    94,   202,    74,   nil,   nil,   nil,   nil,   nil,
-   nil,   197,    69,   nil,   nil,   nil,   196,   nil,   nil,   nil,
-   nil,   nil,   nil,   221,   nil,   260,    65,    65,    72,   232,
-   344,    72,    72,   263,   131,   nil,   142,    66,    74,   230,
-    63,   nil,   128,   nil,    56,    56,    69,   nil,   nil,   133,
-   nil,    23,   249,    49,    49,   312,    15,   nil,   221,   289,
-   285,   142,   nil,    72,   305,   189,   132,   126,   nil,   nil,
-   nil,    66,   nil,   341,   nil,   nil,    44,   nil,    44,   288,
-   142,   333,   216,   133,   nil,    52,    52,   124,   347,   336,
-    23,   281,    72,    23,   283,    15,   nil,    65,    15,   217,
-   nil,   nil,    72,   nil,   221,   120,   nil,   nil,   nil,    72,
-   230,   nil,   nil,   105,   117,    56,   nil,   216,   262,   243,
-   213,   190,   190,   247,    49,   nil,   nil,    73,   233,   131,
-   nil,   nil,    74,    74,   nil,   nil,   nil,   224,   nil,    23,
-    69,    69,   nil,   221,    15,   105,   119,   105,    72,   189,
-   nil,   nil,   nil,   318,   318,   nil,    52,   130,    72,    72,
-   nil,    73,   223,   216,   131,    66,    66,   nil,   nil,    23,
-   330,    23,   224,    23,    15,   nil,    15,   nil,    15,   nil,
-   316,   316,   nil,   nil,   nil,   nil,   nil,   nil,   286,   nil,
-   nil,   221,   290,   131,   105,   nil,    72,   223,   nil,   nil,
-   nil,   128,   216,    74,   190,   nil,   nil,   nil,   298,   nil,
-   131,    69,   317,   317,   105,   nil,   105,   221,   224,   nil,
-    23,   nil,    72,   nil,   nil,    15,   126,   nil,    23,   350,
-    23,   352,   nil,    15,   nil,    15,    66,   nil,   nil,   307,
-    23,   nil,    23,   223,   nil,    15,   nil,    15,   nil,   131,
-   216,   nil,   130,   nil,    76,    73,    73,   224,   nil,   131,
-   131,   nil,   nil,   nil,   nil,   nil,   nil,   321,   321,   108,
-   109,   nil,   nil,   nil,   nil,   nil,   216,   334,   nil,   nil,
-   nil,   nil,   223,   nil,   nil,   nil,   nil,   130,   190,   nil,
-   nil,   nil,   320,   320,   nil,   nil,   nil,   131,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   224,   343,   nil,   nil,   nil,
-   345,   147,   nil,   nil,   nil,   nil,   130,   nil,   167,   nil,
-   nil,   nil,   nil,   131,   nil,   175,    73,   nil,   nil,   nil,
-   223,   224,   nil,   130,   nil,   nil,   nil,   nil,   nil,   nil,
+    24,   228,    59,     6,   130,   108,    16,   226,   177,    30,
+    62,   132,   138,    40,   282,   137,   142,   212,    47,   263,
+    37,   188,   196,    67,   234,    33,   305,   147,    97,   216,
+    24,   110,   100,     6,   125,   296,    16,   262,    59,   265,
+   338,   111,   106,   322,   326,    52,   144,   109,   227,   127,
+   302,    99,   170,   199,   115,    48,   118,   185,   209,    67,
+   207,   279,   116,   280,   146,   318,   203,   176,    56,    26,
+   nil,   183,   269,   120,    98,   nil,   nil,   122,   nil,   nil,
+   342,    52,   nil,   nil,   301,   nil,   nil,   nil,   nil,   146,
+   226,   nil,   nil,   nil,   234,   nil,   nil,   nil,   nil,   nil,
+   123,   311,   nil,   nil,    56,   270,   nil,   nil,   146,    77,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,    74,   nil,   nil,
+   nil,   265,   208,   nil,   nil,    47,   nil,    47,   nil,   202,
+   nil,   200,   nil,   nil,    59,    59,   nil,   nil,   nil,   nil,
+   nil,   136,   nil,   237,   138,    77,   347,   nil,   267,    74,
+   nil,   nil,   220,    74,   315,   235,    67,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,    24,   247,   nil,     6,   293,
+   251,    16,   289,   344,   253,   292,   137,    52,    52,   138,
+   336,   309,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   339,
+   nil,   350,   nil,   nil,   nil,   125,   nil,   226,   nil,   225,
+    56,    56,   nil,   nil,    59,    24,    24,   nil,     6,     6,
+   nil,    16,    16,   nil,   285,   287,   nil,   nil,   290,   nil,
+   nil,   nil,   294,   nil,   nil,   235,   nil,   nil,   108,   299,
+   nil,   225,   266,   nil,   nil,   nil,   nil,   nil,   122,   nil,
+   136,    77,    77,   nil,   nil,   nil,   nil,    52,    74,    74,
+    74,   nil,   nil,    24,   nil,   nil,     6,   nil,   nil,    16,
+   108,   123,   108,   nil,    73,   nil,   nil,   nil,   310,    75,
+    56,   nil,   136,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+    74,   nil,   225,    24,    69,    24,     6,    24,     6,    16,
+     6,    16,   333,    16,   nil,   nil,   133,   nil,   nil,   nil,
+    73,   135,   136,   319,   319,    75,   nil,   337,   108,   nil,
+    74,    77,   nil,   225,   nil,   nil,   129,   nil,   nil,    74,
+    69,   nil,   nil,   136,   nil,   nil,   320,   320,   108,   nil,
+   108,    74,   nil,    24,   346,   nil,     6,    70,   348,    16,
+   nil,    24,   nil,    24,     6,   nil,     6,    16,   nil,    16,
+   353,   nil,   355,    24,   136,    24,     6,   nil,     6,    16,
+   nil,    16,    74,   nil,   nil,   225,   nil,   136,   136,   131,
+   193,   193,   nil,    70,   nil,    74,    74,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   225,
+   nil,   nil,   nil,   nil,   nil,   233,    73,    73,   nil,   nil,
+   135,    75,    75,   nil,   nil,   nil,   136,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,    74,   230,    69,    69,   nil,   nil,
+    79,   nil,   nil,   194,   194,   nil,   nil,   233,   nil,   nil,
+   136,   nil,   135,   nil,   nil,   nil,   112,   113,    74,   nil,
+   117,   nil,   nil,   nil,   nil,   nil,   nil,   230,   nil,   nil,
+   nil,   nil,   nil,   nil,   193,   nil,   nil,   133,   nil,   nil,
+   nil,   nil,   135,   nil,   nil,   nil,    73,   nil,   232,    70,
+    70,    75,   nil,   nil,   nil,   nil,   nil,   129,   233,   151,
+   nil,   nil,   nil,   135,   nil,   171,    69,   nil,   nil,   nil,
+   nil,   nil,   nil,   179,   nil,   nil,   nil,   nil,   230,   nil,
+   232,   nil,   nil,   nil,   nil,   nil,   nil,   194,   nil,   233,
+   nil,   nil,   nil,   nil,   135,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   324,   324,   nil,   nil,   nil,   325,   325,   230,
+   131,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   193,    70,
+   nil,   nil,   321,   321,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   232,   nil,   239,   240,   241,   242,   243,   244,   245,
+   246,   233,   248,   249,   250,   nil,   135,   254,   255,   256,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   223,   nil,   nil,   nil,
+   nil,   230,   232,   nil,   nil,   233,   nil,   nil,   nil,   nil,
+   135,   194,   nil,   nil,   nil,   323,   323,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   230,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   130,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   322,   322,   235,   236,   237,   238,   239,   240,
-   241,   242,   nil,   244,   245,   246,   nil,   nil,   250,   251,
-   252,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   130,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   232,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   130 ]
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   232 ]
 
 racc_goto_check = [
-    34,     2,    77,     4,    63,    20,    32,    74,    21,    70,
-    18,    44,    35,    46,    59,    61,    29,    47,    19,    38,
-    38,    20,    56,     3,    43,    43,    28,    33,    49,    34,
-    34,    31,    53,    54,    20,    26,    58,    29,    21,    33,
-    52,     5,    21,    46,    18,    62,    39,    46,    64,    65,
-    61,    66,    67,    68,    69,    20,    28,    53,     3,    32,
-    28,    37,    71,    72,    73,    26,    30,    27,     3,    26,
-    75,    76,     1,    27,   nil,   nil,    53,    56,   nil,   nil,
-   nil,   nil,   nil,    33,    57,    63,   nil,   nil,   nil,    19,
-   nil,   nil,    21,    21,   nil,   nil,    61,    27,   nil,    59,
-   nil,    27,    38,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    50,    70,    25,   nil,   nil,   nil,   nil,   nil,
-   nil,    29,    23,   nil,   nil,   nil,     3,   nil,   nil,   nil,
-   nil,   nil,   nil,    21,   nil,    61,    21,    21,    46,    18,
-    74,    46,    46,    35,    25,   nil,    50,    22,    25,    20,
-    20,   nil,    23,   nil,    28,    28,    23,   nil,   nil,    49,
-   nil,    34,     2,    26,    26,    33,    20,   nil,    21,    32,
-    44,    50,   nil,    46,    77,    21,    47,    22,   nil,   nil,
-   nil,    22,   nil,    61,   nil,   nil,    57,   nil,    57,    49,
-    50,    33,    27,    49,   nil,    27,    27,    21,    63,    33,
-    34,     2,    46,    34,     2,    20,   nil,    21,    20,    61,
-   nil,   nil,    46,   nil,    21,    28,   nil,   nil,   nil,    46,
-    20,   nil,   nil,     4,    26,    28,   nil,    27,    27,    57,
-    50,    22,    22,    57,    26,   nil,   nil,    24,    50,    25,
-   nil,   nil,    25,    25,   nil,   nil,   nil,    23,   nil,    34,
-    23,    23,   nil,    21,    20,     4,    27,     4,    46,    21,
-   nil,   nil,   nil,    21,    21,   nil,    27,    24,    46,    46,
-   nil,    24,    22,    27,    25,    22,    22,   nil,   nil,    34,
-     2,    34,    23,    34,    20,   nil,    20,   nil,    20,   nil,
-    26,    26,   nil,   nil,   nil,   nil,   nil,   nil,    50,   nil,
-   nil,    21,    50,    25,     4,   nil,    46,    22,   nil,   nil,
-   nil,    23,    27,    25,    22,   nil,   nil,   nil,    50,   nil,
-    25,    23,    27,    27,     4,   nil,     4,    21,    23,   nil,
-    34,   nil,    46,   nil,   nil,    20,    22,   nil,    34,     2,
-    34,     2,   nil,    20,   nil,    20,    22,   nil,   nil,    50,
-    34,   nil,    34,    22,   nil,    20,   nil,    20,   nil,    25,
-    27,   nil,    24,   nil,    48,    24,    24,    23,   nil,    25,
-    25,   nil,   nil,   nil,   nil,   nil,   nil,    23,    23,    48,
-    48,   nil,   nil,   nil,   nil,   nil,    27,    50,   nil,   nil,
-   nil,   nil,    22,   nil,   nil,   nil,   nil,    24,    22,   nil,
-   nil,   nil,    22,    22,   nil,   nil,   nil,    25,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,    23,    50,   nil,   nil,   nil,
-    50,    48,   nil,   nil,   nil,   nil,    24,   nil,    48,   nil,
-   nil,   nil,   nil,    25,   nil,    48,    24,   nil,   nil,   nil,
-    22,    23,   nil,    24,   nil,   nil,   nil,   nil,   nil,   nil,
+    34,    64,    28,    49,    32,     4,    20,    62,    78,     2,
+    18,    44,    50,    71,    75,    47,    35,    33,    58,    60,
+    29,    38,    38,    20,    19,     3,    57,    54,    51,    33,
+    34,    34,    37,    49,    28,    53,    20,    59,    28,    62,
+    55,    51,    29,    43,    43,    26,    18,     5,    63,    30,
+    65,    66,    54,    67,    68,    69,    70,    32,    31,    20,
+    72,    73,     3,    74,    51,    39,    76,    77,    27,     1,
+   nil,    54,    33,     3,    27,   nil,   nil,    26,   nil,   nil,
+    57,    26,   nil,   nil,    64,   nil,   nil,   nil,   nil,    51,
+    62,   nil,   nil,   nil,    19,   nil,   nil,   nil,   nil,   nil,
+    27,    60,   nil,   nil,    27,    38,   nil,   nil,    51,    25,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,    46,   nil,   nil,
+   nil,    62,    71,   nil,   nil,    58,   nil,    58,   nil,    29,
+   nil,     3,   nil,   nil,    28,    28,   nil,   nil,   nil,   nil,
+   nil,    25,   nil,    18,    50,    25,    75,   nil,    35,    46,
+   nil,   nil,    51,    46,    33,    20,    20,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,    34,    58,   nil,    49,    32,
+    58,    20,    44,    62,     2,    50,    47,    26,    26,    50,
+    33,    78,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    33,
+   nil,    64,   nil,   nil,   nil,    28,   nil,    62,   nil,    27,
+    27,    27,   nil,   nil,    28,    34,    34,   nil,    49,    49,
+   nil,    20,    20,   nil,     2,     2,   nil,   nil,    51,   nil,
+   nil,   nil,    51,   nil,   nil,    20,   nil,   nil,     4,    51,
+   nil,    27,    27,   nil,   nil,   nil,   nil,   nil,    26,   nil,
+    25,    25,    25,   nil,   nil,   nil,   nil,    26,    46,    46,
+    46,   nil,   nil,    34,   nil,   nil,    49,   nil,   nil,    20,
+     4,    27,     4,   nil,    23,   nil,   nil,   nil,    51,    24,
+    27,   nil,    25,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+    46,   nil,    27,    34,    21,    34,    49,    34,    49,    20,
+    49,    20,     2,    20,   nil,   nil,    23,   nil,   nil,   nil,
+    23,    24,    25,    26,    26,    24,   nil,    51,     4,   nil,
+    46,    25,   nil,    27,   nil,   nil,    21,   nil,   nil,    46,
+    21,   nil,   nil,    25,   nil,   nil,    27,    27,     4,   nil,
+     4,    46,   nil,    34,    51,   nil,    49,    22,    51,    20,
+   nil,    34,   nil,    34,    49,   nil,    49,    20,   nil,    20,
+     2,   nil,     2,    34,    25,    34,    49,   nil,    49,    20,
+   nil,    20,    46,   nil,   nil,    27,   nil,    25,    25,    22,
+    21,    21,   nil,    22,   nil,    46,    46,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    27,
+   nil,   nil,   nil,   nil,   nil,    23,    23,    23,   nil,   nil,
+    24,    24,    24,   nil,   nil,   nil,    25,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,    46,    21,    21,    21,   nil,   nil,
+    48,   nil,   nil,    22,    22,   nil,   nil,    23,   nil,   nil,
+    25,   nil,    24,   nil,   nil,   nil,    48,    48,    46,   nil,
+    48,   nil,   nil,   nil,   nil,   nil,   nil,    21,   nil,   nil,
+   nil,   nil,   nil,   nil,    21,   nil,   nil,    23,   nil,   nil,
+   nil,   nil,    24,   nil,   nil,   nil,    23,   nil,    22,    22,
+    22,    24,   nil,   nil,   nil,   nil,   nil,    21,    23,    48,
+   nil,   nil,   nil,    24,   nil,    48,    21,   nil,   nil,   nil,
+   nil,   nil,   nil,    48,   nil,   nil,   nil,   nil,    21,   nil,
+    22,   nil,   nil,   nil,   nil,   nil,   nil,    22,   nil,    23,
+   nil,   nil,   nil,   nil,    24,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,    23,    23,   nil,   nil,   nil,    24,    24,    21,
+    22,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    21,    22,
+   nil,   nil,    21,    21,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,    22,   nil,    48,    48,    48,    48,    48,    48,    48,
+    48,    23,    48,    48,    48,   nil,    24,    48,    48,    48,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,    22,   nil,   nil,   nil,
+   nil,    21,    22,   nil,   nil,    23,   nil,   nil,   nil,   nil,
+    24,    22,   nil,   nil,   nil,    22,    22,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,    21,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    24,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,    24,    24,    48,    48,    48,    48,    48,    48,
-    48,    48,   nil,    48,    48,    48,   nil,   nil,    48,    48,
-    48,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-    24,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,    22,   nil,   nil,   nil,   nil,   nil,
    nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,    24 ]
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    22 ]
 
 racc_goto_pointer = [
-   nil,    72,     1,    23,   -26,    11,   nil,   nil,   nil,   nil,
-   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    -6,  -126,
-     5,    -8,   131,   106,   221,    98,    19,    51,    10,    11,
-    20,   -91,   -40,   -98,     0,   -35,   nil,    38,   -81,  -221,
-   nil,   nil,   nil,  -247,   -35,   nil,    -3,   -29,   346,   -19,
-    92,   nil,  -172,   -22,  -264,   nil,  -226,    73,  -140,  -162,
-   nil,  -126,   -96,  -137,  -174,    27,   -52,    17,    42,     9,
-    -2,   -51,  -131,  -130,  -187,   -40,   -13,   -82,   nil,   nil ]
+   nil,    69,     9,    25,   -25,    16,   nil,   nil,   nil,   nil,
+   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,    -7,  -125,
+     6,   267,   320,   247,   252,    92,    28,    51,   -15,    15,
+     0,   -69,   -45,  -113,     0,   -34,   nil,     8,   -82,  -206,
+   nil,   nil,   nil,  -232,   -38,   nil,   100,   -34,   401,     3,
+   -38,     7,   nil,  -182,   -30,  -262,   nil,  -226,     6,  -143,
+  -161,   nil,  -141,  -100,  -147,  -181,    28,   -53,    17,    43,
+     8,     1,   -59,  -137,  -135,  -184,   -48,   -20,   -79,   nil ]
 
 racc_goto_default = [
-   nil,   nil,   nil,   191,     3,     7,    10,    13,    14,    17,
-    19,    21,    24,    28,    31,     2,     6,     9,   nil,    61,
-    83,    85,    87,    88,    91,    92,    77,    78,    81,    12,
-   nil,   nil,   nil,   nil,    68,   nil,    30,   nil,   nil,   185,
-   267,   186,   188,   nil,   nil,   129,    90,    93,   nil,   118,
-    80,   134,   135,   nil,   226,    86,   nil,    71,   nil,   nil,
-   259,    53,   nil,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
-   nil,    38,   nil,   nil,   nil,   nil,   nil,   nil,   174,    70 ]
+   nil,   nil,   nil,   195,     3,     8,    11,    14,    15,    18,
+    20,    22,    25,    29,    32,     2,     7,    10,   nil,    65,
+    86,    88,    89,    91,    94,    95,    80,    81,    83,    13,
+   nil,   nil,   nil,   nil,    72,   nil,    31,   nil,   nil,   189,
+   271,   190,   192,   nil,   nil,   134,    93,    96,   nil,    54,
+   124,    85,   139,   140,   nil,   222,    90,   nil,    76,   nil,
+   nil,   264,    60,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
+   nil,   nil,    41,   nil,   nil,   nil,   nil,   nil,   nil,   178 ]
 
 racc_token_table = {
  false => 0,
@@ -1027,6 +1066,7 @@ Racc_token_to_s_table = [
 'undef',
 'array',
 'expression',
+'hasharrayaccess',
 'param',
 'rvalue',
 'addparam',
@@ -1056,8 +1096,7 @@ Racc_token_to_s_table = [
 'classnameordefault',
 'hashpairs',
 'hashpair',
-'key',
-'hasharrayaccess']
+'key']
 
 Racc_debug_parser = false
 
@@ -1519,30 +1558,37 @@ module_eval <<'.,.,', 'grammar.ra', 338
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 343
+module_eval <<'.,.,', 'grammar.ra', 341
   def _reduce_73( val, _values, result )
+    result = ast AST::VarDef, :name => val[0], :value => val[2]
+   result
+  end
+.,.,
+
+module_eval <<'.,.,', 'grammar.ra', 346
+  def _reduce_74( 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]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 348
-  def _reduce_74( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 351
+  def _reduce_75( val, _values, result )
     result = ast AST::ASTArray
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 348
-  def _reduce_75( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 351
+  def _reduce_76( val, _values, result )
  result = val[0]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 357
-  def _reduce_76( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 360
+  def _reduce_77( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         val[0].push(val[2])
         result = val[0]
@@ -1553,41 +1599,41 @@ module_eval <<'.,.,', 'grammar.ra', 357
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 361
-  def _reduce_77( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 364
+  def _reduce_78( val, _values, result )
     result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 366
-  def _reduce_78( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 369
+  def _reduce_79( val, _values, result )
     result = ast AST::ResourceParam, :param => val[0][:value], :line => val[0][:line], :value => val[2],
                                      :add => true
    result
   end
 .,.,
 
- # reduce 79 omitted
-
  # reduce 80 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 374
-  def _reduce_81( val, _values, result )
+ # reduce 81 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 377
+  def _reduce_82( val, _values, result )
     result = ast AST::ASTArray
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 374
-  def _reduce_82( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 377
+  def _reduce_83( val, _values, result )
  result = val[0]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 383
-  def _reduce_83( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 386
+  def _reduce_84( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         val[0].push(val[2])
         result = val[0]
@@ -1598,10 +1644,10 @@ module_eval <<'.,.,', 'grammar.ra', 383
   end
 .,.,
 
- # reduce 84 omitted
+ # reduce 85 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 392
-  def _reduce_85( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 395
+  def _reduce_86( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         result = val[0].push(val[2])
     else
@@ -1611,8 +1657,6 @@ module_eval <<'.,.,', 'grammar.ra', 392
   end
 .,.,
 
- # reduce 86 omitted
-
  # reduce 87 omitted
 
  # reduce 88 omitted
@@ -1647,8 +1691,10 @@ module_eval <<'.,.,', 'grammar.ra', 392
 
  # reduce 103 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 421
-  def _reduce_104( val, _values, result )
+ # reduce 104 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 424
+  def _reduce_105( val, _values, result )
     args = aryfy(val[2])
     result = ast AST::Function,
         :name => val[0][:value], :line => val[0][:line],
@@ -1658,8 +1704,8 @@ module_eval <<'.,.,', 'grammar.ra', 421
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 426
-  def _reduce_105( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 429
+  def _reduce_106( val, _values, result )
     result = ast AST::Function,
         :name => val[0][:value], :line => val[0][:line],
         :arguments => AST::ASTArray.new({}),
@@ -1668,44 +1714,44 @@ module_eval <<'.,.,', 'grammar.ra', 426
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 430
-  def _reduce_106( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 433
+  def _reduce_107( val, _values, result )
     result = ast AST::String, :value => val[0][:value], :line => val[0][:line]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 432
-  def _reduce_107( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 435
+  def _reduce_108( val, _values, result )
     result = ast AST::FlatString, :value => val[0][:value], :line => val[0][:line]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 436
-  def _reduce_108( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 439
+  def _reduce_109( val, _values, result )
     result = ast AST::Boolean, :value => val[0][:value], :line => val[0][:line]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 441
-  def _reduce_109( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 444
+  def _reduce_110( 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]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 443
-  def _reduce_110( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 446
+  def _reduce_111( val, _values, result )
     result = ast AST::ResourceReference, :type => val[0], :title => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 457
-  def _reduce_111( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 460
+  def _reduce_112( val, _values, result )
     @lexer.commentpop
     args = {
         :test => val[1],
@@ -1721,8 +1767,8 @@ module_eval <<'.,.,', 'grammar.ra', 457
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 470
-  def _reduce_112( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 473
+  def _reduce_113( val, _values, result )
     @lexer.commentpop
     args = {
         :test => val[1],
@@ -1738,32 +1784,25 @@ module_eval <<'.,.,', 'grammar.ra', 470
   end
 .,.,
 
- # reduce 113 omitted
+ # reduce 114 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 476
-  def _reduce_114( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 479
+  def _reduce_115( val, _values, result )
     @lexer.commentpop
     result = ast AST::Else, :statements => val[2]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 480
-  def _reduce_115( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 483
+  def _reduce_116( val, _values, result )
     @lexer.commentpop
     result = ast AST::Else, :statements => ast(AST::Nop)
    result
   end
 .,.,
 
- # reduce 116 omitted
-
-module_eval <<'.,.,', 'grammar.ra', 497
-  def _reduce_117( val, _values, result )
-    result = ast AST::MatchOperator, :operator => val[1][:value], :lval => val[0], :rval => val[2]
-   result
-  end
-.,.,
+ # reduce 117 omitted
 
 module_eval <<'.,.,', 'grammar.ra', 500
   def _reduce_118( val, _values, result )
@@ -1774,7 +1813,7 @@ module_eval <<'.,.,', 'grammar.ra', 500
 
 module_eval <<'.,.,', 'grammar.ra', 503
   def _reduce_119( 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
 .,.,
@@ -1816,14 +1855,14 @@ module_eval <<'.,.,', 'grammar.ra', 518
 
 module_eval <<'.,.,', 'grammar.ra', 521
   def _reduce_125( 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', 524
   def _reduce_126( 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
 .,.,
@@ -1865,14 +1904,14 @@ module_eval <<'.,.,', 'grammar.ra', 539
 
 module_eval <<'.,.,', 'grammar.ra', 542
   def _reduce_132( 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', 545
   def _reduce_133( 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
 .,.,
@@ -1886,13 +1925,20 @@ module_eval <<'.,.,', 'grammar.ra', 548
 
 module_eval <<'.,.,', 'grammar.ra', 551
   def _reduce_135( 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', 560
+module_eval <<'.,.,', 'grammar.ra', 554
   def _reduce_136( val, _values, result )
+    result = val[1]
+   result
+  end
+.,.,
+
+module_eval <<'.,.,', 'grammar.ra', 563
+  def _reduce_137( val, _values, result )
     @lexer.commentpop
     options = val[3]
     unless options.instance_of?(AST::ASTArray)
@@ -1903,10 +1949,10 @@ module_eval <<'.,.,', 'grammar.ra', 560
   end
 .,.,
 
- # reduce 137 omitted
+ # reduce 138 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 570
-  def _reduce_138( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 573
+  def _reduce_139( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         val[0].push val[1]
         result = val[0]
@@ -1917,16 +1963,16 @@ module_eval <<'.,.,', 'grammar.ra', 570
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 575
-  def _reduce_139( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 578
+  def _reduce_140( val, _values, result )
     @lexer.commentpop
     result = ast AST::CaseOpt, :value => val[0], :statements => val[3]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 581
-  def _reduce_140( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 584
+  def _reduce_141( val, _values, result )
     @lexer.commentpop
     result = ast(AST::CaseOpt,
         :value => val[0],
@@ -1936,10 +1982,10 @@ module_eval <<'.,.,', 'grammar.ra', 581
   end
 .,.,
 
- # reduce 141 omitted
+ # reduce 142 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 591
-  def _reduce_142( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 594
+  def _reduce_143( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         val[0].push(val[2])
         result = val[0]
@@ -1950,27 +1996,27 @@ module_eval <<'.,.,', 'grammar.ra', 591
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 595
-  def _reduce_143( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 598
+  def _reduce_144( val, _values, result )
     result = ast AST::Selector, :param => val[0], :values => val[2]
    result
   end
 .,.,
 
- # reduce 144 omitted
+ # reduce 145 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 601
-  def _reduce_145( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 604
+  def _reduce_146( val, _values, result )
     @lexer.commentpop
     result = val[1]
    result
   end
 .,.,
 
- # reduce 146 omitted
+ # reduce 147 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 611
-  def _reduce_147( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 614
+  def _reduce_148( val, _values, result )
     if val[0].instance_of?(AST::ASTArray)
         val[0].push(val[2])
         result = val[0]
@@ -1981,15 +2027,13 @@ module_eval <<'.,.,', 'grammar.ra', 611
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 615
-  def _reduce_148( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 618
+  def _reduce_149( val, _values, result )
     result = ast AST::ResourceParam, :param => val[0], :value => val[2]
    result
   end
 .,.,
 
- # reduce 149 omitted
-
  # reduce 150 omitted
 
  # reduce 151 omitted
@@ -2002,31 +2046,33 @@ module_eval <<'.,.,', 'grammar.ra', 615
 
  # reduce 155 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 626
-  def _reduce_156( val, _values, result )
+ # reduce 156 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 629
+  def _reduce_157( val, _values, result )
     result = ast AST::Default, :value => val[0][:value], :line => val[0][:line]
    result
   end
 .,.,
 
- # reduce 157 omitted
+ # reduce 158 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 629
-  def _reduce_158( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 632
+  def _reduce_159( val, _values, result )
  result = [val[0].value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 633
-  def _reduce_159( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 636
+  def _reduce_160( val, _values, result )
     results = val[0] << val[2].value
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 641
-  def _reduce_160( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 644
+  def _reduce_161( val, _values, result )
     val[1].each do |file|
         import(file)
     end
@@ -2036,8 +2082,8 @@ module_eval <<'.,.,', 'grammar.ra', 641
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 652
-  def _reduce_161( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 655
+  def _reduce_162( val, _values, result )
     @lexer.commentpop
     newdefine classname(val[1]), :arguments => val[2], :code => val[4], :line => val[0][:line]
     @lexer.indefine = false
@@ -2048,8 +2094,8 @@ module_eval <<'.,.,', 'grammar.ra', 652
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 657
-  def _reduce_162( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 660
+  def _reduce_163( val, _values, result )
     @lexer.commentpop
     newdefine classname(val[1]), :arguments => val[2], :line => val[0][:line]
     @lexer.indefine = false
@@ -2058,8 +2104,8 @@ module_eval <<'.,.,', 'grammar.ra', 657
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 666
-  def _reduce_163( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 669
+  def _reduce_164( val, _values, result )
     @lexer.commentpop
     # Our class gets defined in the parent namespace, not our own.
     @lexer.namepop
@@ -2069,8 +2115,8 @@ module_eval <<'.,.,', 'grammar.ra', 666
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 672
-  def _reduce_164( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 675
+  def _reduce_165( val, _values, result )
     @lexer.commentpop
     # Our class gets defined in the parent namespace, not our own.
     @lexer.namepop
@@ -2080,8 +2126,8 @@ module_eval <<'.,.,', 'grammar.ra', 672
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 678
-  def _reduce_165( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 681
+  def _reduce_166( val, _values, result )
     @lexer.commentpop
     newnode val[1], :parent => val[2], :code => val[4], :line => val[0][:line]
     result = nil
@@ -2089,8 +2135,8 @@ module_eval <<'.,.,', 'grammar.ra', 678
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 682
-  def _reduce_166( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 685
+  def _reduce_167( val, _values, result )
     @lexer.commentpop
     newnode val[1], :parent => val[2], :line => val[0][:line]
     result = nil
@@ -2098,31 +2144,31 @@ module_eval <<'.,.,', 'grammar.ra', 682
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 683
-  def _reduce_167( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 686
+  def _reduce_168( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 685
-  def _reduce_168( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 688
+  def _reduce_169( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 686
-  def _reduce_169( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 689
+  def _reduce_170( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
- # reduce 170 omitted
+ # reduce 171 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 696
-  def _reduce_171( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 699
+  def _reduce_172( val, _values, result )
     result = val[0]
     result = [result] unless result.is_a?(Array)
     result << val[2]
@@ -2130,78 +2176,78 @@ module_eval <<'.,.,', 'grammar.ra', 696
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 700
-  def _reduce_172( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 703
+  def _reduce_173( val, _values, result )
     result = ast AST::HostName, :value => val[0]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 701
-  def _reduce_173( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 704
+  def _reduce_174( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 702
-  def _reduce_174( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 705
+  def _reduce_175( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 703
-  def _reduce_175( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 706
+  def _reduce_176( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 704
-  def _reduce_176( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 707
+  def _reduce_177( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
- # reduce 177 omitted
+ # reduce 178 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 710
-  def _reduce_178( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 713
+  def _reduce_179( val, _values, result )
     result = nil
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 714
-  def _reduce_179( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 717
+  def _reduce_180( val, _values, result )
     result = ast AST::ASTArray, :children => []
    result
   end
 .,.,
 
- # reduce 180 omitted
+ # reduce 181 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 719
-  def _reduce_181( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 722
+  def _reduce_182( val, _values, result )
     result = nil
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 723
-  def _reduce_182( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 726
+  def _reduce_183( val, _values, result )
     result = val[1]
     result = [result] unless result[0].is_a?(Array)
    result
   end
 .,.,
 
- # reduce 183 omitted
+ # reduce 184 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 730
-  def _reduce_184( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 733
+  def _reduce_185( val, _values, result )
     result = val[0]
     result = [result] unless result[0].is_a?(Array)
     result << val[2]
@@ -2209,67 +2255,67 @@ module_eval <<'.,.,', 'grammar.ra', 730
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 735
-  def _reduce_185( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 738
+  def _reduce_186( 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', 739
-  def _reduce_186( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 742
+  def _reduce_187( val, _values, result )
     Puppet.warning addcontext("Deprecation notice: must now include '$' in prototype")
     result = [val[0][:value]]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 741
-  def _reduce_187( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 744
+  def _reduce_188( val, _values, result )
     result = [val[0][:value], val[2]]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 743
-  def _reduce_188( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 746
+  def _reduce_189( val, _values, result )
     result = [val[0][:value]]
    result
   end
 .,.,
 
- # reduce 189 omitted
+ # reduce 190 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 748
-  def _reduce_190( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 751
+  def _reduce_191( val, _values, result )
     result = val[1]
    result
   end
 .,.,
 
- # reduce 191 omitted
+ # reduce 192 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 753
-  def _reduce_192( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 756
+  def _reduce_193( val, _values, result )
     result = val[1]
    result
   end
 .,.,
 
- # reduce 193 omitted
-
  # reduce 194 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 759
-  def _reduce_195( val, _values, result )
+ # reduce 195 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 762
+  def _reduce_196( val, _values, result )
     result = ast AST::Variable, :value => val[0][:value], :line => val[0][:line]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 767
-  def _reduce_196( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 770
+  def _reduce_197( val, _values, result )
     if val[1].instance_of?(AST::ASTArray)
         result = val[1]
     else
@@ -2279,8 +2325,8 @@ module_eval <<'.,.,', 'grammar.ra', 767
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 774
-  def _reduce_197( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 777
+  def _reduce_198( val, _values, result )
     if val[1].instance_of?(AST::ASTArray)
         result = val[1]
     else
@@ -2290,35 +2336,35 @@ module_eval <<'.,.,', 'grammar.ra', 774
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 776
-  def _reduce_198( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 779
+  def _reduce_199( val, _values, result )
     result = ast AST::ASTArray
    result
   end
 .,.,
 
- # reduce 199 omitted
-
  # reduce 200 omitted
 
  # reduce 201 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 781
-  def _reduce_202( val, _values, result )
+ # reduce 202 omitted
+
+module_eval <<'.,.,', 'grammar.ra', 784
+  def _reduce_203( val, _values, result )
  result = nil
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 786
-  def _reduce_203( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 789
+  def _reduce_204( val, _values, result )
     result = ast AST::Regex, :value => val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 794
-  def _reduce_204( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 797
+  def _reduce_205( val, _values, result )
     if val[1].instance_of?(AST::ASTHash)
         result = val[1]
     else
@@ -2328,8 +2374,8 @@ module_eval <<'.,.,', 'grammar.ra', 794
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 801
-  def _reduce_205( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 804
+  def _reduce_206( val, _values, result )
     if val[1].instance_of?(AST::ASTHash)
         result = val[1]
     else
@@ -2339,17 +2385,17 @@ module_eval <<'.,.,', 'grammar.ra', 801
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 803
-  def _reduce_206( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 806
+  def _reduce_207( val, _values, result )
     result = ast AST::ASTHash
    result
   end
 .,.,
 
- # reduce 207 omitted
+ # reduce 208 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 813
-  def _reduce_208( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 816
+  def _reduce_209( val, _values, result )
     if val[0].instance_of?(AST::ASTHash)
         result = val[0].merge(val[2])
     else
@@ -2360,45 +2406,45 @@ module_eval <<'.,.,', 'grammar.ra', 813
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 817
-  def _reduce_209( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 820
+  def _reduce_210( val, _values, result )
     result = ast AST::ASTHash, { :value => { val[0] => val[2] } }
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 818
-  def _reduce_210( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 821
+  def _reduce_211( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 819
-  def _reduce_211( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 822
+  def _reduce_212( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 820
-  def _reduce_212( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 823
+  def _reduce_213( val, _values, result )
  result = val[0][:value]
    result
   end
 .,.,
 
-module_eval <<'.,.,', 'grammar.ra', 825
-  def _reduce_213( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 828
+  def _reduce_214( val, _values, result )
     result = ast AST::HashOrArrayAccess, :variable => val[0][:value], :key => val[2]
    result
   end
 .,.,
 
- # reduce 214 omitted
+ # reduce 215 omitted
 
-module_eval <<'.,.,', 'grammar.ra', 830
-  def _reduce_215( val, _values, result )
+module_eval <<'.,.,', 'grammar.ra', 833
+  def _reduce_216( val, _values, result )
     result = ast AST::HashOrArrayAccess, :variable => val[0], :key => val[2]
    result
   end
diff --git a/spec/unit/parser/ast/leaf.rb b/spec/unit/parser/ast/leaf.rb
index 12ec271..0c1c586 100755
--- a/spec/unit/parser/ast/leaf.rb
+++ b/spec/unit/parser/ast/leaf.rb
@@ -99,81 +99,102 @@ describe Puppet::Parser::AST::HashOrArrayAccess do
         @scope = stub 'scope'
     end
 
-    it "should evaluate the variable part if necessary" do
-        @scope.stubs(:lookupvar).with("a").returns(["b"])
+    describe "when evaluating" do
+        it "should evaluate the variable part if necessary" do
+            @scope.stubs(:lookupvar).with("a").returns(["b"])
 
-        variable = stub 'variable', :evaluate => "a"
-        access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => variable, :key => 0 )
+            variable = stub 'variable', :evaluate => "a"
+            access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => variable, :key => 0 )
 
-        variable.expects(:safeevaluate).with(@scope).returns("a")
+            variable.expects(:safeevaluate).with(@scope).returns("a")
 
-        access.evaluate(@scope).should == "b"
-    end
+            access.evaluate(@scope).should == "b"
+        end
 
-    it "should evaluate the access key part if necessary" do
-        @scope.stubs(:lookupvar).with("a").returns(["b"])
+        it "should evaluate the access key part if necessary" do
+            @scope.stubs(:lookupvar).with("a").returns(["b"])
 
-        index = stub 'index', :evaluate => 0
-        access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => index )
+            index = stub 'index', :evaluate => 0
+            access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => index )
 
-        index.expects(:safeevaluate).with(@scope).returns(0)
+            index.expects(:safeevaluate).with(@scope).returns(0)
 
-        access.evaluate(@scope).should == "b"
-    end
+            access.evaluate(@scope).should == "b"
+        end
 
-    it "should be able to return an array member" do
-        @scope.stubs(:lookupvar).with("a").returns(["val1", "val2", "val3"])
+        it "should be able to return an array member" do
+            @scope.stubs(:lookupvar).with("a").returns(["val1", "val2", "val3"])
 
-        access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => 1 )
+            access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => 1 )
 
-        access.evaluate(@scope).should == "val2"
-    end
+            access.evaluate(@scope).should == "val2"
+        end
 
-    it "should be able to return an hash value" do
-        @scope.stubs(:lookupvar).with("a").returns({ "key1" => "val1", "key2" => "val2", "key3" => "val3" })
+        it "should be able to return an hash value" do
+            @scope.stubs(:lookupvar).with("a").returns({ "key1" => "val1", "key2" => "val2", "key3" => "val3" })
 
-        access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key2" )
+            access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key2" )
 
-        access.evaluate(@scope).should == "val2"
-    end
+            access.evaluate(@scope).should == "val2"
+        end
 
-    it "should raise an error if the variable lookup didn't return an hash or an array" do
-        @scope.stubs(:lookupvar).with("a").returns("I'm a string")
+        it "should raise an error if the variable lookup didn't return an hash or an array" do
+            @scope.stubs(:lookupvar).with("a").returns("I'm a string")
 
-        access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key2" )
+            access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key2" )
 
-        lambda { access.evaluate(@scope) }.should raise_error
-    end
+            lambda { access.evaluate(@scope) }.should raise_error
+        end
 
-    it "should raise an error if the variable wasn't in the scope" do
-        @scope.stubs(:lookupvar).with("a").returns(nil)
+        it "should raise an error if the variable wasn't in the scope" do
+            @scope.stubs(:lookupvar).with("a").returns(nil)
 
-        access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key2" )
+            access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key2" )
 
-        lambda { access.evaluate(@scope) }.should raise_error
-    end
+            lambda { access.evaluate(@scope) }.should raise_error
+        end
 
-    it "should return a correct string representation" do
-        access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key2" )
-        access.to_s.should == '$a[key2]'
-    end
+        it "should return a correct string representation" do
+            access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key2" )
+            access.to_s.should == '$a[key2]'
+        end
+
+        it "should work with recursive hash access" do
+            @scope.stubs(:lookupvar).with("a").returns({ "key" => { "subkey" => "b" }})
+
+            access1 = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key")
+            access2 = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => access1, :key => "subkey")
+
+            access2.evaluate(@scope).should == 'b'
+        end
 
-    it "should work with recursive hash access" do
-        @scope.stubs(:lookupvar).with("a").returns({ "key" => { "subkey" => "b" }})
+        it "should work with interleaved array and hash access" do
+            @scope.stubs(:lookupvar).with("a").returns({ "key" => [ "a" , "b" ]})
 
-        access1 = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key")
-        access2 = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => access1, :key => "subkey")
+            access1 = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key")
+            access2 = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => access1, :key => 1)
 
-        access2.evaluate(@scope).should == 'b'
+            access2.evaluate(@scope).should == 'b'
+        end
     end
 
-    it "should work with interleaved array and hash access" do
-        @scope.stubs(:lookupvar).with("a").returns({ "key" => [ "a" , "b" ]})
+    describe "when assigning" do
+        it "should add a new key and value" do
+            scope = Puppet::Parser::Scope.new
+            scope.setvar("a", { 'a' => 'b' })
+
+            access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "b")
+            access.assign(scope, "c" )
 
-        access1 = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key")
-        access2 = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => access1, :key => 1)
+            scope.lookupvar("a").should be_include("b")
+        end
+
+        it "should raise an error when trying to overwrite an hash value" do
+            @scope.stubs(:lookupvar).with("a").returns({ "key" => [ "a" , "b" ]})
+            access = Puppet::Parser::AST::HashOrArrayAccess.new(:variable => "a", :key => "key")
 
-        access2.evaluate(@scope).should == 'b'
+            lambda { access.assign(@scope, "test") }.should raise_error
+        end
     end
 end
 
diff --git a/spec/unit/parser/ast/vardef.rb b/spec/unit/parser/ast/vardef.rb
index 9730cee..a6863e7 100755
--- a/spec/unit/parser/ast/vardef.rb
+++ b/spec/unit/parser/ast/vardef.rb
@@ -43,5 +43,18 @@ describe Puppet::Parser::AST::VarDef do
             vardef.evaluate(@scope)
         end
 
+        describe "when dealing with hash" do
+            it "should delegate to the HashOrArrayAccess assign" do
+                access = stub 'name'
+                access.stubs(:is_a?).with(Puppet::Parser::AST::HashOrArrayAccess).returns(true)
+                value = stub 'value', :safeevaluate => "1"
+                vardef = Puppet::Parser::AST::VarDef.new :name => access, :value => value, :file => nil, :line => nil
+
+                access.expects(:assign).with(@scope, '1')
+
+                vardef.evaluate(@scope)
+            end
+        end
+
     end
 end

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list