ruby_parser-3.11.0/0000755000004100000410000000000013277753330014173 5ustar www-datawww-dataruby_parser-3.11.0/test/0000755000004100000410000000000013277753330015152 5ustar www-datawww-dataruby_parser-3.11.0/test/test_ruby_parser.rb0000555000004100000410000025251013277753330021101 0ustar www-datawww-data# encoding: utf-8 # ENV['VERBOSE'] = "1" require "minitest/autorun" require "ruby_parser" $: << File.expand_path("~/Work/p4/zss/src/sexp_processor/dev/lib") require "pt_testcase" class Sexp alias oldeq2 == # TODO: push up to Sexp def ==(obj) # :nodoc: if obj.class == self.class then super and (self.line.nil? or obj.line.nil? or self.line == obj.line) else false end end end module TestRubyParserShared def setup super # p :test => [self.class, __name__] end BLOCK_DUP_MSG = "Both block arg and actual block given." def test_double_block_error_01 assert_syntax_error "a(1, &b) { }", BLOCK_DUP_MSG end def test_double_block_error_02 assert_syntax_error "a(1, &b) do end", BLOCK_DUP_MSG end def test_double_block_error_03 assert_syntax_error "a 1, &b do end", BLOCK_DUP_MSG end def test_double_block_error_04 assert_syntax_error "m.a(1, &b) { }", BLOCK_DUP_MSG end def test_double_block_error_05 assert_syntax_error "m.a(1, &b) do end", BLOCK_DUP_MSG end def test_double_block_error_06 assert_syntax_error "m.a 1, &b do end", BLOCK_DUP_MSG end def test_double_block_error_07 assert_syntax_error "m::a(1, &b) { }", BLOCK_DUP_MSG end def test_double_block_error_08 assert_syntax_error "m::a(1, &b) do end", BLOCK_DUP_MSG end def test_double_block_error_09 assert_syntax_error "m::a 1, &b do end", BLOCK_DUP_MSG end def test_wtf_7 rb = "a.b (1) {c}" pt = s(:iter, s(:call, s(:call, nil, :a), :b, s(:lit, 1)), 0, s(:call, nil, :c)) assert_parse rb, pt end def test_wtf_8 rb = "a::b (1) {c}" pt = s(:iter, s(:call, s(:call, nil, :a), :b, s(:lit, 1)), 0, s(:call, nil, :c)) assert_parse rb, pt end def test_attrasgn_array_lhs rb = '[1, 2, 3, 4][from .. to] = ["a", "b", "c"]' pt = s(:attrasgn, s(:array, s(:lit, 1), s(:lit, 2), s(:lit, 3), s(:lit, 4)), :[]=, s(:dot2, s(:call, nil, :from), s(:call, nil, :to)), s(:array, s(:str, "a"), s(:str, "b"), s(:str, "c"))) assert_parse rb, pt end def test_attrasgn_array_arg rb = "a[[1, 2]] = 3" pt = s(:attrasgn, s(:call, nil, :a), :[]=, s(:array, s(:lit, 1), s(:lit, 2)), s(:lit, 3)) assert_parse rb, pt end def test_block_append head = s(:args) tail = s(:zsuper) expected = s(:block, s(:args), s(:zsuper)) assert_equal expected, processor.block_append(head, tail) end def test_block_append_begin_begin head = s(:begin, s(:args)) tail = s(:begin, s(:args)) expected = s(:block, s(:args), s(:begin, s(:args))) assert_equal expected, processor.block_append(head, tail) end def test_block_append_block head = s(:block, s(:args)) tail = s(:zsuper) expected = s(:block, s(:args), s(:zsuper)) assert_equal expected, processor.block_append(head, tail) end def test_block_append_nil_head head = nil tail = s(:zsuper) expected = s(:zsuper) assert_equal expected, processor.block_append(head, tail) end def test_block_append_nil_tail head = s(:args) tail = nil expected = s(:args) assert_equal expected, processor.block_append(head, tail) end def test_block_append_tail_block head = s(:call, nil, :f1) tail = s(:block, s(:undef, s(:lit, :x)), s(:undef, s(:lit, :y))) expected = s(:block, s(:call, nil, :f1), s(:block, s(:undef, s(:lit, :x)), s(:undef, s(:lit, :y)))) assert_equal expected, processor.block_append(head, tail) end def test_call_array_arg rb = "1 == [:b, :c]" pt = s(:call, s(:lit, 1), :==, s(:array, s(:lit, :b), s(:lit, :c))) assert_parse rb, pt end def test_call_env processor.env[:a] = :lvar rb = "a.happy" pt = s(:call, s(:lvar, :a), :happy) assert_parse rb, pt end def test_call_self_brackets rb = "self[1]" pt = s(:call, s(:self), :[], s(:lit, 1)) assert_parse rb, pt end def test_dasgn_icky2 rb = "a do\n v = nil\n begin\n yield\n rescue Exception => v\n break\n end\nend" pt = s(:iter, s(:call, nil, :a), 0, s(:block, s(:lasgn, :v, s(:nil)), s(:rescue, s(:yield), s(:resbody, s(:array, s(:const, :Exception), s(:lasgn, :v, s(:gvar, :$!))), s(:break))))) assert_parse rb, pt end def test_class_comments rb = "# blah 1\n# blah 2\n\nclass X\n # blah 3\n def blah\n # blah 4\n end\nend" pt = s(:class, :X, nil, s(:defn, :blah, s(:args), s(:nil))) assert_parse rb, pt assert_equal "# blah 1\n# blah 2\n\n", result.comments assert_equal "# blah 3\n", result.defn.comments end def test_module_comments rb = "# blah 1\n \n # blah 2\n\nmodule X\n # blah 3\n def blah\n # blah 4\n end\nend" pt = s(:module, :X, s(:defn, :blah, s(:args), s(:nil))) assert_parse rb, pt assert_equal "# blah 1\n\n# blah 2\n\n", result.comments assert_equal "# blah 3\n", result.defn.comments end def test_defn_comments rb = "# blah 1\n# blah 2\n\ndef blah\nend" pt = s(:defn, :blah, s(:args), s(:nil)) assert_parse rb, pt assert_equal "# blah 1\n# blah 2\n\n", result.comments end def test_defs_comments rb = "# blah 1\n# blah 2\n\ndef self.blah\nend" pt = s(:defs, s(:self), :blah, s(:args), s(:nil)) assert_parse rb, pt assert_equal "# blah 1\n# blah 2\n\n", result.comments end def test_do_bug # TODO: rename rb = "a 1\na.b do |c|\n # do nothing\nend" pt = s(:block, s(:call, nil, :a, s(:lit, 1)), s(:iter, s(:call, s(:call, nil, :a), :b), s(:args, :c))) assert_parse rb, pt end def test_bug_begin_else rb = "begin 1; else; 2 end" pt = s(:block, s(:lit, 1), s(:lit, 2)) assert_parse rb, pt end def test_begin_else_return_value rb = "begin; else 2; end" pt = s(:lit, 2) assert_parse rb, pt end def test_bug_comment_eq_begin rb = "\n\n#\n=begin\nblah\n=end\n\n" exp = rb.strip + "\n" refute_parse rb assert_equal exp, processor.lexer.comments end def test_eq_begin_why_wont_people_use_their_spacebar? rb = "h[k]=begin\n 42\n end" pt = s(:attrasgn, s(:call, nil, :h), :[]=, s(:call, nil, :k), s(:lit, 42)) assert_parse rb, pt end def test_eq_begin_line_numbers rb = "1\n=begin\ncomment\ncomment\n=end\n2" pt = s(:block, s(:lit, 1).line(1), s(:lit, 2).line(6)) assert_parse rb, pt end def test_bug_call_arglist_parens rb = 'g ( 1), 2' pt = s(:call, nil, :g, s(:lit, 1), s(:lit, 2)) assert_parse rb, pt rb = <<-CODE def f g ( 1), 2 end CODE pt = s(:defn, :f, s(:args), s(:call, nil, :g, s(:lit, 1), s(:lit, 2))) assert_parse rb, pt rb = <<-CODE def f() g (1), 2 end CODE assert_parse rb, pt end def test_dstr_evstr rb = "\"#\{'a'}#\{b}\"" pt = s(:dstr, "a", s(:evstr, s(:call, nil, :b))) assert_parse rb, pt end def test_dstr_str rb = "\"#\{'a'} b\"" pt = s(:str, "a b") assert_parse rb, pt end def test_empty refute_parse "" end def test_evstr_evstr rb = "\"#\{a}#\{b}\"" pt = s(:dstr, "", s(:evstr, s(:call, nil, :a)), s(:evstr, s(:call, nil, :b))) assert_parse rb, pt end def test_evstr_str rb = "\"#\{a} b\"" pt = s(:dstr, "", s(:evstr, s(:call, nil, :a)), s(:str, " b")) assert_parse rb, pt end def test_lasgn_env rb = "a = 42" pt = s(:lasgn, :a, s(:lit, 42)) expected_env = { :a => :lvar } assert_parse rb, pt assert_equal expected_env, processor.env.all end def test_lasgn_ivar_env rb = "@a = 42" pt = s(:iasgn, :@a, s(:lit, 42)) assert_parse rb, pt assert_empty processor.env.all end def test_list_append a = s(:lit, 1) b = s(:lit, 2) c = s(:lit, 3) result = processor.list_append(s(:array, b.dup), c.dup) assert_equal s(:array, b, c), result result = processor.list_append(b.dup, c.dup) assert_equal s(:array, b, c), result result = processor.list_append(result, a.dup) assert_equal s(:array, b, c, a), result lhs, rhs = s(:array, s(:lit, :iter)), s(:when, s(:const, :BRANCHING), nil) expected = s(:array, s(:lit, :iter), s(:when, s(:const, :BRANCHING), nil)) assert_equal expected, processor.list_append(lhs, rhs) end def test_list_prepend a = s(:lit, 1) b = s(:lit, 2) c = s(:lit, 3) result = processor.list_prepend(b.dup, s(:array, c.dup)) assert_equal s(:array, b, c), result result = processor.list_prepend(b.dup, c.dup) assert_equal s(:array, b, c), result result = processor.list_prepend(a.dup, result) assert_equal s(:array, a, b, c), result end def test_literal_concat_dstr_dstr lhs = s(:dstr, "Failed to download spec ", s(:evstr, s(:call, nil, :spec_name)), s(:str, " from "), s(:evstr, s(:call, nil, :source_uri)), s(:str, ":\n")) rhs = s(:dstr, "\t", s(:evstr, s(:call, s(:ivar, :@fetch_error), :message))) expected = s(:dstr, "Failed to download spec ", s(:evstr, s(:call, nil, :spec_name)), s(:str, " from "), s(:evstr, s(:call, nil, :source_uri)), s(:str, ":\n"), s(:str, "\t"), s(:evstr, s(:call, s(:ivar, :@fetch_error), :message))) assert_equal expected, processor.literal_concat(lhs, rhs) end def test_literal_concat_dstr_evstr lhs, rhs = s(:dstr, "a"), s(:evstr, s(:call, nil, :b)) expected = s(:dstr, "a", s(:evstr, s(:call, nil, :b))) assert_equal expected, processor.literal_concat(lhs, rhs) end def test_literal_concat_evstr_evstr lhs, rhs = s(:evstr, s(:lit, 1)), s(:evstr, s(:lit, 2)) expected = s(:dstr, "", s(:evstr, s(:lit, 1)), s(:evstr, s(:lit, 2))) assert_equal expected, processor.literal_concat(lhs, rhs) end def test_literal_concat_str_evstr lhs, rhs = s(:str, ""), s(:evstr, s(:str, "blah")) assert_equal s(:str, "blah"), processor.literal_concat(lhs, rhs) end def test_logical_op_12 lhs = s(:lit, 1) rhs = s(:lit, 2) exp = s(:and, s(:lit, 1), s(:lit, 2)) assert_equal exp, processor.logical_op(:and, lhs, rhs) end def test_logical_op_1234_5 lhs = s(:and, s(:lit, 1), s(:and, s(:lit, 2), s(:and, s(:lit, 3), s(:lit, 4)))) rhs = s(:lit, 5) exp = s(:and, s(:lit, 1), s(:and, s(:lit, 2), s(:and, s(:lit, 3), s(:and, s(:lit, 4), s(:lit, 5))))) assert_equal exp, processor.logical_op(:and, lhs, rhs) end def test_logical_op_123_4 lhs = s(:and, s(:lit, 1), s(:and, s(:lit, 2), s(:lit, 3))) rhs = s(:lit, 4) exp = s(:and, s(:lit, 1), s(:and, s(:lit, 2), s(:and, s(:lit, 3), s(:lit, 4)))) assert_equal exp, processor.logical_op(:and, lhs, rhs) end def test_logical_op_12_3 lhs = s(:and, s(:lit, 1), s(:lit, 2)) rhs = s(:lit, 3) exp = s(:and, s(:lit, 1), s(:and, s(:lit, 2), s(:lit, 3))) assert_equal exp, processor.logical_op(:and, lhs, rhs) end def test_logical_op_nested_mix lhs = s(:or, s(:call, nil, :a), s(:call, nil, :b)) rhs = s(:and, s(:call, nil, :c), s(:call, nil, :d)) exp = s(:or, s(:or, s(:call, nil, :a), s(:call, nil, :b)), s(:and, s(:call, nil, :c), s(:call, nil, :d))) lhs.paren = true rhs.paren = true assert_equal exp, processor.logical_op(:or, lhs, rhs) end def test_str_evstr rb = "\"a #\{b}\"" pt = s(:dstr, "a ", s(:evstr, s(:call, nil, :b))) assert_parse rb, pt end def test_dsym_to_sym pt = s(:alias, s(:lit, :<<), s(:lit, :>>)) rb = "alias :<< :>>" assert_parse rb, pt rb = 'alias :"<<" :">>"' assert_parse rb, pt end def test_regexp regexps = { "/wtf/" => /wtf/, "/wtf/n" => /wtf/n, "/wtf/m" => /wtf/m, "/wtf/nm" => /wtf/nm, "/wtf/nmnmnmnm" => /wtf/nm, } regexps.each do |rb, lit| assert_parse rb, s(:lit, lit) end # TODO: add more including interpolation etc end def test_label_vs_string rb = "_buf << ':\n'" pt = s(:call, s(:call, nil, :_buf), :<<, s(:str, ":\n")) assert_parse rb, pt end def test_str_backslashes long_string = '\n' * 100 rb = "x '#{long_string}'" pt = s(:call, nil, :x, s(:str, long_string)) assert_parse rb, pt end def test_str_pct_Q_nested rb = "%Q[before [#\{nest}] after]" pt = s(:dstr, "before [", s(:evstr, s(:call, nil, :nest)), s(:str, "] after")) assert_parse rb, pt end def test_str_pct_q rb = "%q{a b c}" pt = s(:str, "a b c") assert_parse rb, pt end # def test_str_pct_nested_nested # rb = "%{ { #\{ \"#\{1}\" } } }" # assert_equal " { 1 } ", eval(rb) # pt = s(:dstr, " { ", s(:evstr, s(:lit, 1)), s(:str, " } ")) # # assert_parse rb, pt # end def test_str_str rb = "\"a #\{'b'}\"" pt = s(:str, "a b") assert_parse rb, pt end def test_str_str_str rb = "\"a #\{'b'} c\"" pt = s(:str, "a b c") assert_parse rb, pt end def test_str_newline_hash_line_number rb = "\"\\n\\n\\n\\n#\"\n1" pt = s(:block, s(:str, "\n\n\n\n#").line(1), s(:lit, 1).line(2)) assert_parse rb, pt end def after_process_hook klass, node, data, input_name, output_name assert_equal 1, @result.line, "should have proper line number" end def test_parse_line_block rb = "a = 42\np a" pt = s(:block, s(:lasgn, :a, s(:lit, 42)), s(:call, nil, :p, s(:lvar, :a))) assert_parse_line rb, pt, 1 assert_equal 1, result.lasgn.line, "lasgn should have line number" assert_equal 2, result.call.line, "call should have line number" expected = "(string)" assert_equal expected, result.file assert_equal expected, result.lasgn.file assert_equal expected, result.call.file assert_same result.file, result.lasgn.file assert_same result.file, result.call.file end def test_parse_line_block_inline_comment rb = "a\nb # comment\nc" pt = s(:block, s(:call, nil, :a).line(1), s(:call, nil, :b).line(2), s(:call, nil, :c).line(3)) assert_parse rb, pt end def test_parse_line_block_inline_multiline_comment rb = "a\nb # comment\n# another comment\nc" pt = s(:block, s(:call, nil, :a).line(1), s(:call, nil, :b).line(2), s(:call, nil, :c).line(4)).line(1) assert_parse rb, pt end def test_parse_line_block_inline_comment_leading_newlines rb = "\n\n\na\nb # comment\n# another comment\nc" pt = s(:block, s(:call, nil, :a).line(4), s(:call, nil, :b).line(5), s(:call, nil, :c).line(7)).line(4) assert_parse rb, pt end def test_parse_line_call_no_args rb = "f do |x, y|\n x + y\nend" pt = s(:iter, s(:call, nil, :f), s(:args, :x, :y), s(:call, s(:lvar, :x), :+, s(:lvar, :y))) assert_parse_line rb, pt, 1 assert_equal 1, result[1].line, "call should have line number" assert_equal 1, result[2].line, "masgn should have line number" assert_equal 2, result[3].line, "call should have line number" end def test_parse_line_call_ivar_line_break_paren rb = "a(@b\n)" pt = s(:call, nil, :a, s(:ivar, :@b).line(1)).line(1) assert_parse rb, pt end def test_parse_line_call_ivar_arg_no_parens_line_break rb = "a @b\n" pt = s(:call, nil, :a, s(:ivar, :@b).line(1)).line(1) assert_parse rb, pt end def test_parse_line_defn_no_parens pt = s(:defn, :f, s(:args), s(:nil)) rb = "def f\nend" assert_parse_line rb, pt, 1 processor.reset rb = "def f\n\nend" assert_parse_line rb, pt, 1 end def test_parse_line_defn_complex rb = "def x(y)\n p(y)\n y *= 2\n return y;\nend" # TODO: remove () & ; pt = s(:defn, :x, s(:args, :y), s(:call, nil, :p, s(:lvar, :y)), s(:lasgn, :y, s(:call, s(:lvar, :y), :*, s(:lit, 2))), s(:return, s(:lvar, :y))) assert_parse_line rb, pt, 1 body = result assert_equal 2, body.call.line, "call should have line number" assert_equal 3, body.lasgn.line, "lasgn should have line number" assert_equal 4, body.return.line, "return should have line number" end def test_parse_line_evstr_after_break rb = "\"a\"\\\n\"\#{b}\"" pt = s(:dstr, "a", s(:evstr, s(:call, nil, :b).line(2)).line(2)).line(1) assert_parse rb, pt end def test_parse_line_dstr_newline skip "dstr line numbers are just gonna be screwed for a while..." rb = <<-'CODE' "a\n#{ }" true CODE pt = s(:block, s(:dstr, "a\n", s(:evstr)).line(1), s(:true).line(3)) assert_parse rb, pt end def test_parse_line_hash_lit rb = "{\n:s1 => 1,\n}" pt = s(:hash, s(:lit, :s1).line(2), s(:lit, 1).line(2), ).line(1) assert_parse rb, pt end def test_parse_line_heredoc_evstr skip "heredoc line numbers are just gonna be screwed for a while..." rb = "<<-A\na\n\#{b}\nA" pt = s(:dstr, "a\n", s(:evstr, s(:call, nil, :b).line(3)), s(:str, "\n")).line(1) assert_parse rb, pt end def test_parse_line_multiline_str rb = "\"a\nb\"\n1" pt = s(:block, s(:str, "a\nb").line(1), s(:lit, 1).line(3)).line(1) assert_parse rb, pt end def test_parse_line_multiline_str_literal_n rb = "\"a\\nb\"\n1" pt = s(:block, s(:str, "a\nb").line(1), s(:lit, 1).line(2)).line(1) assert_parse rb, pt end def test_parse_line_iter_call_parens rb = "f(a) do |x, y|\n x + y\nend" pt = s(:iter, s(:call, nil, :f, s(:call, nil, :a)), s(:args, :x, :y), s(:call, s(:lvar, :x), :+, s(:lvar, :y))) assert_parse_line rb, pt, 1 assert_equal 1, result[1].line, "call should have line number" assert_equal 1, result[2].line, "masgn should have line number" assert_equal 2, result[3].line, "call should have line number" end def test_parse_line_iter_call_no_parens rb = "f a do |x, y|\n x + y\nend" pt = s(:iter, s(:call, nil, :f, s(:call, nil, :a).line(1)).line(1), s(:args, :x, :y).line(1), s(:call, s(:lvar, :x).line(2), :+, s(:lvar, :y).line(2)).line(2)).line(1) assert_parse rb, pt end def test_parse_line_heredoc rb = <<-CODE string = <<-HEREDOC very long string HEREDOC puts string CODE pt = s(:block, s(:lasgn, :string, s(:str, " very long string\n").line(1)).line(1), s(:call, nil, :puts, s(:lvar, :string).line(4)).line(4)).line(1) assert_parse rb, pt end def test_parse_line_heredoc_regexp_chars rb = <<-CODE string = <<-"^D" very long string ^D puts string CODE pt = s(:block, s(:lasgn, :string, s(:str, " very long string\n").line(1)).line(1), s(:call, nil, :puts, s(:lvar, :string).line(4)).line(4)).line(1) assert_parse rb, pt end def test_parse_line_newlines rb = "true\n\n" pt = s(:true) assert_parse_line rb, pt, 1 end def test_parse_line_rescue rb = "begin\n a\n rescue\n b\n rescue\n c\n end\n" pt = s(:rescue, s(:call, nil, :a).line(2), s(:resbody, s(:array).line(3), s(:call, nil, :b).line(4)).line(3), s(:resbody, s(:array).line(5), s(:call, nil, :c).line(6)).line(5)).line(1) assert_parse_line rb, pt, 1 end def test_parse_line_return rb = <<-RUBY def blah if true then return 42 end end RUBY pt = s(:defn, :blah, s(:args), s(:if, s(:true), s(:return, s(:lit, 42)), nil)) assert_parse_line rb, pt, 1 assert_equal 3, result.if.return.line assert_equal 3, result.if.return.lit.line end def test_parse_line_str_with_newline_escape rb = 'a("\n", true)' pt = s(:call, nil, :a, s(:str, "\n").line(1), s(:true).line(1)) assert_parse rb, pt end def test_parse_line_trailing_newlines rb = "a \nb" pt = s(:block, s(:call, nil, :a).line(1), s(:call, nil, :b).line(2)).line(1) assert_parse rb, pt end def test_bug_and rb = "true and []" pt = s(:and, s(:true), s(:array)) assert_parse rb, pt rb = "true and\ntrue" pt = s(:and, s(:true), s(:true)) assert_parse rb, pt end def test_bug_cond_pct rb = "case; when %r%blahblah%; end" pt = s(:case, nil, s(:when, s(:array, s(:lit, /blahblah/)), nil), nil) assert_parse rb, pt end # according to 2.3.1 parser -- added: ON 1.8 only: # rp.process("f { |(a,b),c| }") == rp.process("f { |((a,b),c)| }") # ruby18 -e "p lambda { |(a,b)| }.arity" # => 2 # ruby19 -e "p lambda { |(a,b)| }.arity" # => 1 # ruby18 -e "p lambda { |(a,b),c| }.arity" # => 2 # ruby19 -e "p lambda { |(a,b),c| }.arity" # => 2 # ruby18 -e "p lambda { |((a,b),c)| }.arity" # => 2 # ruby19 -e "p lambda { |((a,b),c)| }.arity" # => 1 def test_bug_args_masgn rb = "f { |(a, b), c| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :a, :b), :c)) assert_parse rb, pt.dup end def test_bug_args_masgn2 rb = "f { |((a, b), c), d| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, s(:masgn, :a, :b), :c), :d)) assert_parse rb, pt end def ruby18 RubyParser::V18 === self.processor end def test_bug_comma val = if ruby18 then s(:lit, 100) else s(:str, "d") end rb = "if test ?d, dir then end" pt = s(:if, s(:call, nil, :test, val, s(:call, nil, :dir)), nil, nil) assert_parse rb, pt end def test_bug_case_when_regexp rb = "case :x; when /x/ then end" pt = s(:case, s(:lit, :x), s(:when, s(:array, s(:lit, /x/)), nil), nil) assert_parse rb, pt end def test_bug_masgn_right rb = "f { |a, (b, c)| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:masgn, :b, :c))) assert_parse rb, pt end def test_when_splat rb = "case a; when *b then; end" pt = s(:case, s(:call, nil, :a), s(:when, s(:array, s(:splat, s(:call, nil, :b))), nil), nil) assert_parse rb, pt end def test_if_symbol rb = "if f :x; end" pt = s(:if, s(:call, nil, :f, s(:lit, :x)), nil, nil) assert_parse rb, pt end def test_bug_not_parens rb = "not(a)" pt = if ruby18 then s(:not, s(:call, nil, :a)) else s(:call, s(:call, nil, :a), :"!") end assert_parse rb, pt end def test_pipe_space rb = "a.b do | | end" pt = s(:iter, s(:call, s(:call, nil, :a), :b), s(:args)) assert_parse rb, pt end def test_cond_unary_minus rb = "if -1; end" pt = s(:if, s(:lit, -1), nil, nil) assert_parse rb, pt end def test_bug_op_asgn_rescue rb = "a ||= b rescue nil" pt = s(:rescue, s(:op_asgn_or, s(:lvar, :a), s(:lasgn, :a, s(:call, nil, :b))), s(:resbody, s(:array), s(:nil))) assert_parse rb, pt end def test_magic_encoding_comment rb = "# encoding: utf-8\nclass ExampleUTF8ClassNameVarietà; def self.è; così = :però; end\nend\n" rb.force_encoding "ASCII-8BIT" if rb.respond_to? :force_encoding # TODO: class vars # TODO: odd-ternary: a ?bb : c # TODO: globals pt = s(:class, :"ExampleUTF8ClassNameVariet\303\240", nil, s(:defs, s(:self), :"\303\250", s(:args), s(:lasgn, :"cos\303\254", s(:lit, :"per\303\262")))) err = RUBY_VERSION =~ /^1\.8/ ? "Skipping magic encoding comment\n" : "" assert_output "", err do assert_parse rb, pt end end def test_iter_args_1 rb = "f { |a,b| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, :b)) assert_parse rb, pt end def test_iter_args_3 rb = "f { |a, (b, c), d| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:masgn, :b, :c), :d)) assert_parse rb, pt end def test_str_heredoc_interp rb = "<<\"\"\n\#{x}\nblah2\n\n" pt = s(:dstr, "", s(:evstr, s(:call, nil, :x)), s(:str, "\nblah2\n")) assert_parse rb, pt end def test_i_fucking_hate_line_numbers rb = <<-END.gsub(/^ {6}/, '') if true p 1 a.b 2 c.d 3, 4 e.f 5 g.h 6, 7 p(1) a.b(2) c.d(3, 4) e.f(5) g.h(6, 7) end END pt = s(:if, s(:true).line(1), s(:block, s(:call, nil, :p, s(:lit, 1).line(2)).line(2), s(:call, s(:call, nil, :a).line(3), :b, s(:lit, 2).line(3)).line(3), s(:call, s(:call, nil, :c).line(4), :d, s(:lit, 3).line(4), s(:lit, 4).line(4)).line(4), s(:call, s(:call, nil, :e).line(5), :f, s(:lit, 5).line(5)).line(5), s(:call, s(:call, nil, :g).line(6), :h, s(:lit, 6).line(6), s(:lit, 7).line(6)).line(6), s(:call, nil, :p, s(:lit, 1).line(7)).line(7), s(:call, s(:call, nil, :a).line(8), :b, s(:lit, 2).line(8)).line(8), s(:call, s(:call, nil, :c).line(9), :d, s(:lit, 3).line(9), s(:lit, 4).line(9)).line(9), s(:call, s(:call, nil, :e).line(10), :f, s(:lit, 5).line(10)).line(10), s(:call, s(:call, nil, :g).line(11), :h, s(:lit, 6).line(11), s(:lit, 7).line(11)).line(11)).line(2), nil).line(1) assert_parse rb, pt end def test_i_fucking_hate_line_numbers2 rb = <<-EOM.gsub(/^ {6}/, '') if true then p('a') b = 1 p b c =1 end a EOM pt = s(:block, s(:if, s(:true).line(1), s(:block, s(:call, nil, :p, s(:str, "a").line(2)).line(2), s(:lasgn, :b, s(:lit, 1).line(3)).line(3), s(:call, nil, :p, s(:lvar, :b).line(4)).line(4), s(:lasgn, :c, s(:lit, 1).line(5)).line(5)).line(2), nil).line(1), s(:call, nil, :a).line(7)).line(1) assert_parse rb, pt end def test_parse_comments p = RubyParser.new sexp = p.parse <<-CODE # class comment class Inline def show # woot end # Returns a list of things def list # woot end end CODE assert_equal "# class comment\n", sexp.comments act = sexp.find_nodes(:defn).map(&:comments) exp = ["", "# Returns a list of things\n"] assert_equal exp, act assert_equal [], processor.comments assert_equal "", processor.lexer.comments end def test_call_pipe rb = "1 | 2" pt = s(:call, s(:lit, 1), :|, s(:lit, 2)) assert_parse rb, pt end def test_lasgn_command rb = "a = b.c 1" pt = s(:lasgn, :a, s(:call, s(:call, nil, :b), :c, s(:lit, 1))) assert_parse rb, pt end def test_call_args_command rb = "a.b c.d 1" pt = s(:call, s(:call, nil, :a), :b, s(:call, s(:call, nil, :c), :d, s(:lit, 1))) assert_parse rb, pt end def test_defined_eh_parens rb = "defined?(42)" pt = s(:defined, s(:lit, 42)) assert_parse rb, pt end def test_if_elsif rb = "if 1; elsif 2; end" pt = s(:if, s(:lit, 1), nil, s(:if, s(:lit, 2), nil, nil)) assert_parse rb, pt end def test_call_gt rb = "1 > 2" pt = s(:call, s(:lit, 1), :>, s(:lit, 2)) assert_parse rb, pt end def test_call_lt rb = "1 < 2" pt = s(:call, s(:lit, 1), :<, s(:lit, 2)) assert_parse rb, pt end def test_call_lte rb = "1 <= 2" pt = s(:call, s(:lit, 1), :<=, s(:lit, 2)) assert_parse rb, pt end def test_call_spaceship rb = "1 <=> 2" pt = s(:call, s(:lit, 1), :<=>, s(:lit, 2)) assert_parse rb, pt end def test_call_and rb = "1 & 2" pt = s(:call, s(:lit, 1), :&, s(:lit, 2)) assert_parse rb, pt end def test_call_star2 rb = "1 ** 2" pt = s(:call, s(:lit, 1), :"**", s(:lit, 2)) assert_parse rb, pt end def test_call_colon2 rb = "A::b" pt = s(:call, s(:const, :A), :b) assert_parse rb, pt end def test_call_star rb = "1 * 2" pt = s(:call, s(:lit, 1), :"*", s(:lit, 2)) assert_parse rb, pt end def test_yield_arg rb = "yield 42" pt = s(:yield, s(:lit, 42)) assert_parse rb, pt end def test_call_div rb = "1 / 2" pt = s(:call, s(:lit, 1), :/, s(:lit, 2)) assert_parse rb, pt end def test_call_eq3 rb = "1 === 2" pt = s(:call, s(:lit, 1), :===, s(:lit, 2)) assert_parse rb, pt end def test_call_carat rb = "1 ^ 2" pt = s(:call, s(:lit, 1), :^, s(:lit, 2)) assert_parse rb, pt end def test_call_rshift rb = "1 >> 2" pt = s(:call, s(:lit, 1), :>>, s(:lit, 2)) assert_parse rb, pt end def test_lasgn_arg_rescue_arg rb = "a = 1 rescue 2" pt = s(:lasgn, :a, s(:rescue, s(:lit, 1), s(:resbody, s(:array), s(:lit, 2)))) assert_parse rb, pt end def test_call_bang_squiggle rb = "1 !~ 2" pt = s(:not, s(:call, s(:lit, 1), :=~, s(:lit, 2))) # TODO: check for 1.9+ assert_parse rb, pt end def test_super_arg rb = "super 42" pt = s(:super, s(:lit, 42)) assert_parse rb, pt end def test_defns_reserved rb = "def self.return; end" pt = s(:defs, s(:self), :return, s(:args), s(:nil)) assert_parse rb, pt end def test_unary_minus rb = "-a" pt = s(:call, s(:call, nil, :a), :"-@") assert_parse rb, pt end def test_masgn_command_call rb = "a, = b.c 1" pt = s(:masgn, s(:array, s(:lasgn, :a)), s(:to_ary, s(:call, s(:call, nil, :b), :c, s(:lit, 1)))) assert_parse rb, pt end def test_uminus_float rb = "-0.0" pt = s(:lit, -0.0) assert_parse rb, pt end def test_op_asgn_command_call rb = "a ||= b.c 2" pt = s(:op_asgn_or, s(:lvar, :a), s(:lasgn, :a, s(:call, s(:call, nil, :b), :c, s(:lit, 2)))) assert_parse rb, pt end def test_masgn_paren rb = "(a, b) = c.d" pt = s(:masgn, s(:array, s(:lasgn, :a), s(:lasgn, :b)), s(:to_ary, s(:call, s(:call, nil, :c), :d))) assert_parse rb, pt end def test_unary_tilde rb = "~a" pt = s(:call, s(:call, nil, :a), :~) assert_parse rb, pt end def test_unary_plus rb = "+a" pt = s(:call, s(:call, nil, :a), :+@) assert_parse rb, pt end def test_qwords_empty rb = "%w()" pt = s(:array) assert_parse rb, pt end def test_array_line_breaks # It seems like arrays are roughly created when a certain element is created # In ruby > 1.9 it seems like that is after the last element, so the array # itself is assigned line 3 (since the last element is on line 3) and for # ruby <= 1.9 it seems to get created after the first element, so the array # itself is assigned line 2 (since the first element is on line 2). # This seems to happen since arrays like this are created with a line in # ruby_parser.yy like `result = s(:array, val[0])`. So, the array is not # created by itself. The creation of the array itself is deferred until there # is an element to create it with. That seems to mess up line numbers # for the array. Luckily, the arary elements all seemt to get the correct # line number. start_line = self.class.to_s =~ /1[89]/ ? 2 : 3 rb = "[\n'a',\n'b']\n1" pt = s(:block, s(:array, s(:str, "a").line(2), s(:str, "b").line(3)).line(start_line), s(:lit, 1).line(4)) assert_parse rb, pt end def test_non_interpolated_word_array_line_breaks rb = "%w(\na\nb\n)\n1" pt = s(:block, s(:array, s(:str, "a").line(2), s(:str, "b").line(3)).line(1), s(:lit, 1).line(5)) assert_parse rb, pt end def test_interpolated_word_array_line_breaks rb = "%W(\na\nb\n)\n1" pt = s(:block, s(:array, s(:str, "a").line(2), s(:str, "b").line(3)).line(1), s(:lit, 1).line(5)) assert_parse rb, pt end def test_qWords_space rb = "%W( )" pt = s(:array) assert_parse rb, pt end def test_attr_asgn_colon_id rb = "A::b = 1" pt = s(:attrasgn, s(:const, :A), :b=, s(:lit, 1)) assert_parse rb, pt end def test_aref_args_assocs rb = "[1 => 2]" pt = s(:array, s(:hash, s(:lit, 1), s(:lit, 2))) assert_parse rb, pt end def test_BEGIN rb = "BEGIN { 42 }" pt = s(:iter, s(:preexe), s(:args), s(:lit, 42)) assert_parse rb, pt end def test_attrasgn_primary_dot_constant rb = "a.B = 1" pt = s(:attrasgn, s(:call, nil, :a), :"B=", s(:lit, 1)) assert_parse rb, pt end def test_op_asgn_primary_colon_identifier rb = "A::b += 1" pt = s(:op_asgn, s(:const, :A), s(:lit, 1), :b, :+) # TODO: check? looks wack assert_parse rb, pt end def test_words_interp rb = '%W(#{1}b)' pt = s(:array, s(:dstr, "", s(:evstr, s(:lit, 1)), s(:str, "b"))) assert_parse rb, pt end def test_op_asgn_index_command_call rb = "a[:b] ||= c 1, 2" pt = s(:op_asgn1, s(:call, nil, :a), s(:array, s(:lit, :b)), :"||", s(:call, nil, :c, s(:lit, 1), s(:lit, 2))) assert_parse rb, pt end def test_op_asgn_val_dot_ident_command_call rb = "a.b ||= c 1" pt = s(:op_asgn, s(:call, nil, :a), s(:call, nil, :c, s(:lit, 1)), :b, :"||") assert_parse rb, pt end def test_yield_empty_parens rb = "yield()" pt = s(:yield) assert_parse rb, pt end def test_masgn_lhs_splat rb = "*a = 1, 2, 3" pt = s(:masgn, s(:array, s(:splat, s(:lasgn, :a))), s(:array, s(:lit, 1), s(:lit, 2), s(:lit, 3))) assert_parse rb, pt end def test_masgn_arg_ident rb = "a, b.C = d" pt = s(:masgn, s(:array, s(:lasgn, :a), s(:attrasgn, s(:call, nil, :b), :"C=")), s(:to_ary, s(:call, nil, :d))) assert_parse rb, pt end def test_masgn_arg_colon_arg rb = "a, b::c = d" pt = s(:masgn, s(:array, s(:lasgn, :a), s(:attrasgn, s(:call, nil, :b), :c=)), s(:to_ary, s(:call, nil, :d))) assert_parse rb, pt end def test_masgn_star rb = "* = 1" pt = s(:masgn, s(:array, s(:splat)), s(:to_ary, s(:lit, 1))) assert_parse rb, pt end def test_op_asgn_dot_ident_command_call rb = "A.B ||= c 1" pt = s(:op_asgn, s(:const, :A), s(:call, nil, :c, s(:lit, 1)), :B, :"||") assert_parse rb, pt end def test_block_decomp_splat skip "not that smart yet" if ruby18 # HACK rb = "f { |(*a)| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :"*a"))) assert_parse rb, pt end def test_masgn_colon3 rb = "::A, ::B = 1, 2" pt = s(:masgn, s(:array, s(:const, nil, s(:colon3, :A)), s(:const, s(:colon3, :B))), s(:array, s(:lit, 1), s(:lit, 2))) assert_parse rb, pt end def test_masgn_colon2 rb = "a, b::C = 1, 2" pt = s(:masgn, s(:array, s(:lasgn, :a), s(:const, s(:colon2, s(:call, nil, :b), :C))), s(:array, s(:lit, 1), s(:lit, 2))) assert_parse rb, pt end def test_alias_gvar_backref rb = "alias $MATCH $&" pt = s(:valias, :$MATCH, :$&) assert_parse rb, pt end def test_heredoc_broken_windows_theory_applies_to_microsoft_more_than_anything rb = "< 1])" pt = s(:call, nil, :a, s(:array, s(:lit, :b), s(:hash, s(:lit, :c), s(:lit, 1)))) assert_parse rb, pt end def test_multiline_hash_declaration pt = s(:call, nil, :f, s(:hash, s(:lit, :state), s(:hash))) assert_parse "f(state: {})", pt assert_parse "f(state: {\n})", pt assert_parse "f(state:\n {\n})", pt end def test_mlhs_back_splat rb = "a, b, c, *s = f" pt = s(:masgn, s(:array, s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c), s(:splat, s(:lasgn, :s))), s(:to_ary, s(:call, nil, :f))) assert_parse rb, pt end def test_mlhs_back_anonsplat rb = "a, b, c, * = f" pt = s(:masgn, s(:array, s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c), s(:splat)), s(:to_ary, s(:call, nil, :f))) assert_parse rb, pt end def test_mlhs_mid_splat rb = "a, b, c, *s, x, y, z = f" pt = s(:masgn, s(:array, s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c), s(:splat, s(:lasgn, :s)), s(:lasgn, :x), s(:lasgn, :y), s(:lasgn, :z)), s(:to_ary, s(:call, nil, :f))) assert_parse rb, pt end def test_mlhs_mid_anonsplat rb = "a, b, c, *, x, y, z = f" pt = s(:masgn, s(:array, s(:lasgn, :a), s(:splat), s(:lasgn, :z)), s(:to_ary, s(:call, nil, :f))) pt = s(:masgn, s(:array, s(:lasgn, :a), s(:lasgn, :b), s(:lasgn, :c), s(:splat), s(:lasgn, :x), s(:lasgn, :y), s(:lasgn, :z)), s(:to_ary, s(:call, nil, :f))) assert_parse rb, pt end def test_mlhs_front_splat rb = "*s, x, y, z = f" pt = s(:masgn, s(:array, s(:splat, s(:lasgn, :s)), s(:lasgn, :z)), s(:to_ary, s(:call, nil, :f))) pt = s(:masgn, s(:array, s(:splat, s(:lasgn, :s)), s(:lasgn, :x), s(:lasgn, :y), s(:lasgn, :z)), s(:to_ary, s(:call, nil, :f))) assert_parse rb, pt end def test_mlhs_front_anonsplat rb = "*, x, y, z = f" pt = s(:masgn, s(:array, s(:splat), s(:lasgn, :x), s(:lasgn, :y), s(:lasgn, :z)), s(:to_ary, s(:call, nil, :f))) assert_parse rb, pt end def test_expr_not_bang rb = "! a b" pt = s(:call, s(:call, nil, :a, s(:call, nil, :b)), :"!") assert_parse rb, pt end def test_do_colon_19 rb = "while false : 42 end" assert_parse_error rb, "(string):1 :: parse error on value \":\" (tCOLON)" end def test_assoc_list_19 rb = "{1, 2, 3, 4}" assert_parse_error rb, "(string):1 :: parse error on value \",\" (tCOMMA)" end def test_case_then_colon_19 rb = <<-EOM case x when Fixnum : # need the space to not hit new hash arg syntax 42 end EOM assert_parse_error rb, "(string):2 :: parse error on value \":\" (tCOLON)" end def test_parse_def_xxx1 rb = 'def f(a, *b, c = nil) end' assert_parse_error rb, '(string):1 :: parse error on value "=" (tEQL)' end def test_parse_def_xxx2 rb = 'def f(a = nil, *b, c = nil) end' assert_parse_error rb, '(string):1 :: parse error on value "=" (tEQL)' end def test_parse_until_not_canonical rb = "until not var.nil?\n 'foo'\nend" pt = s(:until, s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), s(:str, "foo"), true) assert_parse rb, pt end def test_parse_until_not_noncanonical rb = "until not var.nil?\n 'foo'\nend" pt = s(:until, s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), s(:str, "foo"), true) processor.canonicalize_conditions = false assert_parse rb, pt end def test_parse_if_not_canonical rb = "if not var.nil? then 'foo' else 'bar'\nend" pt = s(:if, s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), s(:str, "foo"), s(:str, "bar")) assert_parse rb, pt end def test_parse_if_not_noncanonical rb = "if not var.nil? then 'foo' else 'bar'\nend" pt = s(:if, s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), s(:str, "foo"), s(:str, "bar")) processor.canonicalize_conditions = false assert_parse rb, pt end def test_parse_while_not_canonical rb = "while not var.nil?\n 'foo'\nend" pt = s(:while, s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), s(:str, "foo"), true) assert_parse rb, pt end def test_parse_while_not_noncanonical rb = "while not var.nil?\n 'foo'\nend" pt = s(:while, s(:call, s(:call, s(:call, nil, :var), :nil?), :"!"), s(:str, "foo"), true) processor.canonicalize_conditions = false assert_parse rb, pt end def test_parse_opt_call_args_assocs_comma rb = "1[2=>3,]" pt = s(:call, s(:lit, 1), :[], s(:hash, s(:lit, 2), s(:lit, 3))) assert_parse rb, pt end def test_parse_opt_call_args_lit_comma rb = "1[2,]" pt = s(:call, s(:lit, 1), :[], s(:lit, 2)) assert_parse rb, pt end def test_bug_hash_args rb = "foo(:bar, baz: nil)" pt = s(:call, nil, :foo, s(:lit, :bar), s(:hash, s(:lit, :baz), s(:nil))) assert_parse rb, pt end def test_bug_hash_args_trailing_comma rb = "foo(:bar, baz: nil,)" pt = s(:call, nil, :foo, # NOTE: same sexp as test_bug_hash_args s(:lit, :bar), s(:hash, s(:lit, :baz), s(:nil))) assert_parse rb, pt end def test_block_arg_optional rb = "a { |b = 1| }" pt = s(:iter, s(:call, nil, :a), s(:args, s(:lasgn, :b, s(:lit, 1)))) assert_parse rb, pt end def test_zomg_sometimes_i_hate_this_project rb = <<-RUBY { a: lambda { b ? c() : d }, e: nil, } RUBY pt = s(:hash, s(:lit, :a), s(:iter, s(:call, nil, :lambda), 0, s(:if, s(:call, nil, :b), s(:call, nil, :c), s(:call, nil, :d))), s(:lit, :e), s(:nil)) assert_parse rb, pt end def test_pipe_semicolon skip "not yet" rb = "a.b do | ; c | end" pt = s(:iter, s(:call, s(:call, nil, :a), :b), 0) assert_parse rb, pt end def test_wtf # lambda -> f_larglist lambda_body # f_larglist -> f_args opt_bv_decl # opt_bv_decl # bv_decls # bvar rb = "->(a, b=nil) { p [a, b] }" pt = s(:iter, s(:call, nil, :lambda), s(:args, :a, s(:lasgn, :b, s(:nil))), s(:call, nil, :p, s(:array, s(:lvar, :a), s(:lvar, :b)))) assert_parse rb, pt # rb = "->(a; b) { p [a, b] }" # # assert_parse rb, pt end def test_block_args_opt1 rb = "f { |a, b = 42| [a, b] }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:lasgn, :b, s(:lit, 42))), s(:array, s(:lvar, :a), s(:lvar, :b))) assert_parse rb, pt end def test_block_args_opt2_2 rb = "f { |a, b = 42, c = 24| [a, b, c] }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:lasgn, :b, s(:lit, 42)), s(:lasgn, :c, s(:lit, 24))), s(:array, s(:lvar, :a), s(:lvar, :b), s(:lvar, :c))) assert_parse rb, pt end def test_block_args_opt3 rb = "f { |a, b = 42, c = 24, &d| [a, b, c, d] }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:lasgn, :b, s(:lit, 42)), s(:lasgn, :c, s(:lit, 24)), :"&d"), s(:array, s(:lvar, :a), s(:lvar, :b), s(:lvar, :c), s(:lvar, :d))) assert_parse rb, pt end def test_i_have_no_freakin_clue rb = "1 ? b('') : 2\na d: 3" pt = s(:block, s(:if, s(:lit, 1), s(:call, nil, :b, s(:str, "")), s(:lit, 2)), s(:call, nil, :a, s(:hash, s(:lit, :d), s(:lit, 3)))) assert_parse rb, pt end def test_motherfuckin_leading_dots rb = "a\n.b" pt = s(:call, s(:call, nil, :a), :b) assert_parse rb, pt end def test_motherfuckin_leading_dots2 rb = "a\n..b" assert_parse_error rb, '(string):2 :: parse error on value ".." (tDOT2)' end def test_kill_me rb = "f { |a, (b, *c)| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:masgn, :b, :"*c"))) assert_parse rb, pt end def test_kill_me2 rb = "f { |*a, b| }" pt = s(:iter, s(:call, nil, :f), s(:args, :"*a", :b)) assert_parse rb, pt end def test_kill_me3 rb = "f { |*a, b, &c| }" pt = s(:iter, s(:call, nil, :f), s(:args, :"*a", :b, :"&c")) assert_parse rb, pt end def test_kill_me4 rb = "a=b ? true: false" pt = s(:lasgn, :a, s(:if, s(:call, nil, :b), s(:true), s(:false))) assert_parse rb, pt end def test_kill_me5 skip "not yet" rb = "f ->() { g do end }" pt = 42 assert_parse rb, pt end def test_iter_args_4 rb = "f { |a, *b, c| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, :"*b", :c)) assert_parse rb, pt end def test_iter_args_5 skip "not yet" rb = "f { |a, &b| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, :"&b")) assert_parse rb, pt end def test_iter_args_6 rb = "f { |a, b=42, c| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :c)) assert_parse rb, pt end # In 1.8, block args with an outer set of parens are superfluous. # In 1.9, outer set of parens are NOT... they are an explicit extra masgn. def test_iter_args_2__19 rb = "f { |(a, b)| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :a, :b))) assert_parse rb, pt end def test_bug_args__19 rb = "f { |(a, b)| d }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:masgn, :a, :b)), s(:call, nil, :d)) assert_parse rb, pt end def test_bug_args_masgn_outer_parens__19 rb = "f { |((k, v), i)| }" pt = s(:iter, # NOTE: same sexp as test_bug_args_masgn s(:call, nil, :f), s(:args, s(:masgn, s(:masgn, :k, :v), :i))) assert_parse rb, pt.dup end def test_iter_args_7_1 rb = "f { |a = 42, *b| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:lasgn, :a, s(:lit, 42)), :"*b")) assert_parse rb, pt end def test_iter_args_7_2 rb = "f { |a = 42, *b, &c| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:lasgn, :a, s(:lit, 42)), :"*b", :"&c")) assert_parse rb, pt end def test_iter_args_8_1 rb = "f { |a = 42, *b, c| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:lasgn, :a, s(:lit, 42)), :"*b", :c)) assert_parse rb, pt end def test_iter_args_8_2 rb = "f { |a = 42, *b, c, &d| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:lasgn, :a, s(:lit, 42)), :"*b", :c, :"&d")) assert_parse rb, pt end def test_iter_args_9_1 rb = "f { |a = 42, b| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:lasgn, :a, s(:lit, 42)), :b)) assert_parse rb, pt end def test_iter_args_9_2 rb = "f { |a = 42, b, &c| }" pt = s(:iter, s(:call, nil, :f), s(:args, s(:lasgn, :a, s(:lit, 42)), :b, :"&c")) assert_parse rb, pt end def test_iter_args_10_1 rb = "f { |a, b = 42, *c| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :"*c")) assert_parse rb, pt end def test_iter_args_10_2 rb = "f { |a, b = 42, *c, &d| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :"*c", :"&d")) assert_parse rb, pt end def test_iter_args_11_1 rb = "f { |a, b = 42, *c, d| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :"*c", :d)) assert_parse rb, pt end def test_iter_args_11_2 rb = "f { |a, b = 42, *c, d, &e| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:lasgn, :b, s(:lit, 42)), :"*c", :d, :"&e")) assert_parse rb, pt end def test_kill_me_6 # | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list rb = "f { |a, (b, *c, d)| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:masgn, :b, :"*c", :d))) assert_parse rb, pt end def test_kill_me_7 # | f_marg_list tCOMMA tSTAR rb = "f { |a, (b, *)| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:masgn, :b, :*))) assert_parse rb, pt end def test_kill_me_8 # | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list rb = "f { |a, (b, *, c)| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:masgn, :b, :*, :c))) assert_parse rb, pt end def test_kill_me_9 # | tSTAR f_norm_arg rb = "f { |a, (*b)| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:masgn, :"*b"))) assert_parse rb, pt end def test_kill_me_10 # | tSTAR f_norm_arg tCOMMA f_marg_list rb = "f { |a, (*b, c)| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:masgn, :"*b", :c))) assert_parse rb, pt end def test_kill_me_11 # | tSTAR rb = "f { |a, (*)| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:masgn, :*))) assert_parse rb, pt end def test_kill_me_12 # | tSTAR tCOMMA f_marg_list rb = "f { |a, (*, b)| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, s(:masgn, :*, :b))) assert_parse rb, pt end def test_index_0 rb = "a[] = b" pt = s(:attrasgn, s(:call, nil, :a), :[]=, s(:call, nil, :b)) assert_parse rb, pt end def test_lambda_do_vs_brace pt = s(:call, nil, :f, s(:iter, s(:call, nil, :lambda), s(:args))) rb = "f ->() {}" assert_parse rb, pt rb = "f ->() do end" assert_parse rb, pt pt = s(:call, nil, :f, s(:iter, s(:call, nil, :lambda), 0)) rb = "f -> {}" assert_parse rb, pt rb = "f -> do end" assert_parse rb, pt end def test_thingy pt = s(:call, s(:call, nil, :f), :call, s(:lit, 42)) rb = "f.(42)" assert_parse rb, pt rb = "f::(42)" assert_parse rb, pt end def test_unary_plus_on_literal rb = "+:a" pt = s(:call, s(:lit, :a), :+@) assert_parse rb, pt end end module TestRubyParserShared21Plus def test_f_kw rb = "def x k:42; end" pt = s(:defn, :x, s(:args, s(:kwarg, :k, s(:lit, 42))), s(:nil)) assert_parse rb, pt end def test_f_kw__required rb = "def x k:; end" pt = s(:defn, :x, s(:args, s(:kwarg, :k)), s(:nil)) assert_parse rb, pt end def test_block_kw rb = "blah { |k:42| }" pt = s(:iter, s(:call, nil, :blah), s(:args, s(:kwarg, :k, s(:lit, 42)))) assert_parse rb, pt rb = "blah { |k:42| }" assert_parse rb, pt end def test_block_kw__required rb = "blah do |k:| end" pt = s(:iter, s(:call, nil, :blah), s(:args, s(:kwarg, :k))) assert_parse rb, pt rb = "blah do |k:| end" assert_parse rb, pt end def test_stabby_block_kw rb = "-> (k:42) { }" pt = s(:iter, s(:call, nil, :lambda), s(:args, s(:kwarg, :k, s(:lit, 42)))) assert_parse rb, pt end def test_stabby_block_kw__required rb = "-> (k:) { }" pt = s(:iter, s(:call, nil, :lambda), s(:args, s(:kwarg, :k))) assert_parse rb, pt end def test_parse_line_heredoc_hardnewline skip "not yet" rb = <<-'CODE'.gsub(/^ /, '') <<-EOFOO \n\n\n\n\n\n\n\n\n EOFOO class Foo end CODE pt = s(:block, s(:str, "\n\n\n\n\n\n\n\n\n\n").line(1), s(:class, :Foo, nil).line(5)).line(1) assert_parse rb, pt end end module TestRubyParserShared20Plus def test_non_interpolated_symbol_array_line_breaks rb = "%i(\na\nb\n)\n1" pt = s(:block, s(:array, s(:lit, :a).line(2), s(:lit, :b).line(3)).line(1), s(:lit, 1).line(5)) assert_parse rb, pt end def test_interpolated_symbol_array_line_breaks rb = "%I(\na\nb\n)\n1" pt = s(:block, s(:array, s(:lit, :a).line(2), s(:lit, :b).line(3)).line(1), s(:lit, 1).line(5)) assert_parse rb, pt end def test_defs_kwarg rb = "def self.a b: 1\nend" pt = s(:defs, s(:self), :a, s(:args, s(:kwarg, :b, s(:lit, 1))), s(:nil)) assert_parse rb, pt end def test_defn_kwarg_kwsplat rb = "def a(b: 1, **c) end" pt = s(:defn, :a, s(:args, s(:kwarg, :b, s(:lit, 1)), :"**c"), s(:nil)) assert_parse rb, pt end def test_defn_kwarg_kwsplat_anon rb = "def a(b: 1, **) end" pt = s(:defn, :a, s(:args, s(:kwarg, :b, s(:lit, 1)), :"**"), s(:nil)) assert_parse rb, pt end def test_defn_kwarg_env rb = "def test(**testing) test_splat(**testing) end" pt = s(:defn, :test, s(:args, :"**testing"), s(:call, nil, :test_splat, s(:hash, s(:kwsplat, s(:lvar, :testing))))) assert_parse rb, pt end def test_dstr_lex_state rb = '"#{p:a}"' pt = s(:dstr, "", s(:evstr, s(:call, nil, :p, s(:lit, :a)))) assert_parse rb, pt end def test_call_arg_kwsplat rb = "a(b, **1)" pt = s(:call, nil, :a, s(:call, nil, :b), s(:hash, s(:kwsplat, s(:lit, 1)))) assert_parse rb, pt end def test_call_arg_assoc_kwsplat rb = "f(1, kw: 2, **3)" pt = s(:call, nil, :f, s(:lit, 1), s(:hash, s(:lit, :kw), s(:lit, 2), s(:kwsplat, s(:lit, 3)))) assert_parse rb, pt end def test_call_kwsplat rb = "a(**1)" pt = s(:call, nil, :a, s(:hash, s(:kwsplat, s(:lit, 1)))) assert_parse rb, pt end def test_iter_kwarg rb = "a { |b: 1| }" pt = s(:iter, s(:call, nil, :a), s(:args, s(:kwarg, :b, s(:lit, 1)))) assert_parse rb, pt end def test_iter_kwarg_kwsplat rb = "a { |b: 1, **c| }" pt = s(:iter, s(:call, nil, :a), s(:args, s(:kwarg, :b, s(:lit, 1)), :"**c")) assert_parse rb, pt end def test_block_kwarg_lvar rb = "bl { |kw: :val| kw }" pt = s(:iter, s(:call, nil, :bl), s(:args, s(:kwarg, :kw, s(:lit, :val))), s(:lvar, :kw)) assert_parse rb, pt end def test_block_kwarg_lvar_multiple rb = "bl { |kw: :val, kw2: :val2 | kw }" pt = s(:iter, s(:call, nil, :bl), s(:args, s(:kwarg, :kw, s(:lit, :val)), s(:kwarg, :kw2, s(:lit, :val2))), s(:lvar, :kw)) assert_parse rb, pt end def test_stabby_block_iter_call rb = "x -> () do\na.b do\nend\nend" pt = s(:call, nil, :x, s(:iter, s(:call, nil, :lambda), s(:args), s(:iter, s(:call, s(:call, nil, :a), :b), 0))) assert_parse rb, pt end def test_stabby_block_iter_call_no_target_with_arg rb = "x -> () do\na(1) do\nend\nend" pt = s(:call, nil, :x, s(:iter, s(:call, nil, :lambda), s(:args), s(:iter, s(:call, nil, :a, s(:lit, 1)), 0))) assert_parse rb, pt end def test_block_call_dot_op2_brace_block rb = "a.b c() do d end.e do |f| g end" pt = s(:iter, s(:call, s(:iter, s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)), 0, s(:call, nil, :d)), :e), s(:args, :f), s(:call, nil, :g)) assert_parse rb, pt end def test_block_call_dot_op2_cmd_args_do_block rb = "a.b c() do d end.e f do |g| h end" pt = s(:iter, s(:call, s(:iter, s(:call, s(:call, nil, :a), :b, s(:call, nil, :c)), 0, s(:call, nil, :d)), :e, s(:call, nil, :f)), s(:args, :g), s(:call, nil, :h)) assert_parse rb, pt end def test_defn_kwarg_val rb = "def f(a, b:1) end" pt = s(:defn, :f, s(:args, :a, s(:kwarg, :b, s(:lit, 1))), s(:nil)) assert_parse rb, pt end def test_args_kw_block rb = "def f(a: 1, &b); end" pt = s(:defn, :f, s(:args, s(:kwarg, :a, s(:lit, 1)), :"&b"), s(:nil)) assert_parse rb, pt end def test_defn_kwarg_kwarg rb = "def f(a, b: 1, c: 2) end" pt = s(:defn, :f, s(:args, :a, s(:kwarg, :b, s(:lit, 1)), s(:kwarg, :c, s(:lit, 2))), s(:nil)) assert_parse rb, pt end def test_defn_kwarg_lvar rb = "def fun(kw: :val); kw; end" pt = s(:defn, :fun, s(:args, s(:kwarg, :kw, s(:lit, :val))), s(:lvar, :kw)) assert_parse rb, pt end def test_defn_kwarg_no_parens rb = "def f a: 1\nend" pt = s(:defn, :f, s(:args, s(:kwarg, :a, s(:lit, 1))), s(:nil)) assert_parse rb, pt end def test_defn_powarg rb = "def f(**opts) end" pt = s(:defn, :f, s(:args, :"**opts"), s(:nil)) assert_parse rb, pt end def test_block_arg_kwsplat rb = "a { |**b| }" pt = s(:iter, s(:call, nil, :a), s(:args, :"**b")) assert_parse rb, pt end def test_symbols rb = "%i(a b c)" pt = s(:array, s(:lit, :a), s(:lit, :b), s(:lit, :c)) assert_parse rb, pt end def test_symbols_interp rb = '%i(a b#{1+1} c)' pt = s(:array, s(:lit, :a), s(:lit, :'b#{1+1}'), s(:lit, :c)) assert_parse rb, pt end def test_symbols_empty_space rb = "%i( )" pt = s(:array) assert_parse rb, pt end def test_symbols_empty rb = "%i()" pt = s(:array) assert_parse rb, pt end def test_qsymbols rb = "%I(a b c)" pt = s(:array, s(:lit, :a), s(:lit, :b), s(:lit, :c)) assert_parse rb, pt end def test_qsymbols_interp rb = '%I(a b#{1+1} c)' pt = s(:array, s(:lit, :a), s(:dsym, "b", s(:evstr, s(:call, s(:lit, 1), :+, s(:lit, 1)))), s(:lit, :c)) assert_parse rb, pt end def test_qsymbols_empty rb = "%I()" pt = s(:array) assert_parse rb, pt end def test_qsymbols_empty_space rb = "%I( )" pt = s(:array) assert_parse rb, pt end def test_iter_array_curly rb = "f :a, [:b] { |c, d| }" # yes, this is bad code... that's their problem pt = s(:iter, s(:call, nil, :f, s(:lit, :a), s(:array, s(:lit, :b))), s(:args, :c, :d)) assert_parse rb, pt end def test_bug_249 rb = "mount (Class.new do\ndef initialize\nend\n end).new, :at => 'endpoint'" pt = s(:call, nil, :mount, s(:call, s(:iter, s(:call, s(:const, :Class), :new), 0, s(:defn, :initialize, s(:args), s(:nil))), :new), s(:hash, s(:lit, :at), s(:str, "endpoint"))) assert_parse rb, pt end end module TestRubyParserShared22Plus def test_call_args_assoc_quoted pt = s(:call, nil, :x, s(:hash, s(:lit, :k), s(:lit, 42))) rb = "x 'k':42" assert_parse rb, pt rb = 'x "k":42' assert_parse rb, pt rb = 'x "#{k}":42' pt = s(:call, nil, :x, s(:hash, s(:dsym, "", s(:evstr, s(:call, nil, :k))), s(:lit, 42))) assert_parse rb, pt end def test_bug191 pt = s(:if, s(:call, nil, :a), s(:str, ""), s(:call, nil, :b)) rb = "a ? '': b" assert_parse rb, pt rb = "a ? \"\": b" assert_parse rb, pt end def test_quoted_symbol_keys rb = "{ 'a': :b }" pt = s(:hash, s(:lit, :a), s(:lit, :b)) assert_parse rb, pt end def test_quoted_symbol_hash_arg rb = "puts 'a': {}" pt = s(:call, nil, :puts, s(:hash, s(:lit, :a), s(:hash))) assert_parse rb, pt end end module TestRubyParserShared23Plus def test_safe_call rb = "a&.b" pt = s(:safe_call, s(:call, nil, :a), :b) assert_parse rb, pt end def test_safe_call_newline rb = "a&.b\n" pt = s(:safe_call, s(:call, nil, :a), :b) assert_parse rb, pt end def test_safe_call_rhs_newline rb = "c = a&.b\n" pt = s(:lasgn, :c, s(:safe_call, s(:call, nil, :a), :b)) assert_parse rb, pt end def test_safe_call_after_newline rb = "a\n&.b" pt = s(:safe_call, s(:call, nil, :a), :b) assert_parse rb, pt end def test_safe_calls rb = "a&.b&.c(1)" pt = s(:safe_call, s(:safe_call, s(:call, nil, :a), :b), :c, s(:lit, 1)) assert_parse rb, pt end def test_safe_attrasgn rb = "a&.b = 1" pt = s(:safe_attrasgn, s(:call, nil, :a), :"b=", s(:lit, 1)) assert_parse rb, pt end def test_safe_attrasgn_constant rb = "a&.B = 1" pt = s(:safe_attrasgn, s(:call, nil, :a), :"B=", s(:lit, 1)) assert_parse rb, pt end def test_safe_call_dot_parens rb = "a&.()" pt = s(:safe_call, s(:call, nil, :a), :call) assert_parse rb, pt end def test_safe_call_operator rb = "a&.> 1" pt = s(:safe_call, s(:call, nil, :a), :>, s(:lit, 1)).line(1) assert_parse rb, pt end def test_safe_op_asgn rb = "a&.b += x 1\n" pt = s(:safe_op_asgn, s(:call, nil, :a), s(:call, nil, :x, s(:lit, 1)), :b, :+).line(1) assert_parse rb, pt end def test_safe_op_asgn2 rb = "a&.b ||=\nx;" pt = s(:safe_op_asgn2, s(:call, nil, :a), :b=, :"||", s(:call, nil, :x)).line(1) assert_parse rb, pt end def test_ruby21_numbers rb = "[1i, 2r, 3ri]" pt = s(:array, s(:lit, Complex(0, 1)), s(:lit, Rational(2)), s(:lit, Complex(0, Rational(3)))) assert_parse rb, pt end def test_float_with_if_modifier rb = "1.0if true" pt = s(:if, s(:true), s(:lit, 1.0), nil) assert_parse rb, pt end def test_integer_with_if_modifier rb = "1_234if true" pt = s(:if, s(:true), s(:lit, 1234), nil) assert_parse rb, pt end def test_heredoc_squiggly rb = "a = <<~\"EOF\"\n blah blah\n EOF\n\n" pt = s(:lasgn, :a, s(:str, "blah blah\n")) assert_parse rb, pt end def test_required_kwarg_no_value rb = "def x a:, b:\nend" pt = s(:defn, :x, s(:args, s(:kwarg, :a), s(:kwarg, :b)), s(:nil)) assert_parse rb, pt end def test_slashy_newlines_within_string rb = %(puts "hello\\ my\\ dear\\ friend" a + b ) pt = s(:block, s(:call, nil, :puts, s(:str, "hello my dear friend").line(1)).line(1), s(:call, s(:call, nil, :a).line(6), :+, s(:call, nil, :b).line(6)).line(6) ).line(1) assert_parse rb, pt end end module TestRubyParserShared24Plus # ...version specific tests to go here... end module TestRubyParserShared25Plus # ...version specific tests to go here... end class TestRubyParser < Minitest::Test def test_cls_version assert_equal 18, RubyParser::V18.version assert_equal 23, RubyParser::V23.version assert_equal 24, RubyParser::V24.version assert_equal 24, Ruby24Parser.version refute RubyParser::Parser.version end def test_parse processor = RubyParser.new # 1.8 only syntax rb = "while false : 42 end" pt = s(:while, s(:false), s(:lit, 42), true) assert_silent do assert_equal pt, processor.parse(rb) end # 1.9 only syntax rb = "a.()" pt = s(:call, s(:call, nil, :a), :call) assert_equal pt, processor.parse(rb) # bad syntax e = assert_raises Racc::ParseError do capture_io do processor.parse "a.(" end end msg = "(string):1 :: parse error on value \"(\" (tLPAREN2)" assert_equal msg, e.message.strip end end class RubyParserTestCase < ParseTreeTestCase attr_accessor :result, :processor make_my_diffs_pretty! def self.previous key "Ruby" end def self.generate_test klass, node, data, input_name, output_name return if node.to_s =~ /bmethod|dmethod/ return if Array === data['Ruby'] output_name = "ParseTree" super end def assert_parse rb, pt self.result = processor.parse rb assert_equal pt, result end def refute_parse rb self.result = processor.parse rb assert_nil result end def assert_syntax_error rb, emsg e = nil assert_silent do e = assert_raises RubyParser::SyntaxError do processor.parse rb end end assert_equal emsg, e.message end def assert_parse_error rb, emsg e = nil assert_silent do e = assert_raises Racc::ParseError do processor.parse rb end end assert_equal emsg, e.message end def assert_parse_line rb, pt, line old_env = ENV["VERBOSE"] ENV["VERBOSE"] = "1" assert_parse rb, pt assert_equal line, result.line, "call should have line number" ensure ENV["VERBOSE"] = old_env end end class TestRubyParserV18 < RubyParserTestCase include TestRubyParserShared def setup super self.processor = RubyParser::V18.new end def test_assoc_list_18 rb = "{1, 2, 3, 4}" pt = s(:hash, s(:lit, 1), s(:lit, 2), s(:lit, 3), s(:lit, 4)) assert_parse rb, pt end def test_case_then_colon_18 rb = "case x; when Fixnum: 42; end" pt = s(:case, s(:call, nil, :x), s(:when, s(:array, s(:const, :Fixnum)), s(:lit, 42)), nil) assert_parse rb, pt end def test_do_colon_18 rb = "while false : 42 end" pt = s(:while, s(:false), s(:lit, 42), true) assert_parse rb, pt end def test_call_space_before_paren_args_18 rb = "a (:b, :c, :d => :e)" pt = s(:call, nil, :a, s(:lit, :b), s(:lit, :c), s(:hash, s(:lit, :d), s(:lit, :e))) assert_parse rb, pt end # In 1.8, block args with an outer set of parens are superfluous. # In 1.9, outer set of parens are NOT... they are an explicit extra masgn. def test_iter_args_2_18 rb = "f { |(a, b)| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, :b)) assert_parse rb, pt end def test_bug_args__18 rb = "f { |(a, b)| }" pt = s(:iter, s(:call, nil, :f), s(:args, :a, :b)) assert_parse rb, pt end def test_bug_args_masgn_outer_parens__18 rb = "f { |((a, b), c)| }" pt = s(:iter, # NOTE: same sexp as test_bug_args_masgn s(:call, nil, :f), s(:args, s(:masgn, :a, :b), :c)) assert_parse rb, pt.dup end def test_double_block_error_10 assert_syntax_error "a.b (&b) {}", BLOCK_DUP_MSG end def test_double_block_error_11 assert_syntax_error "a (1, &b) { }", BLOCK_DUP_MSG end def test_double_block_error_12 assert_syntax_error "a (1, &b) do end", BLOCK_DUP_MSG end def test_double_block_error_13 assert_syntax_error "m.a (1, &b) { }", BLOCK_DUP_MSG end def test_double_block_error_14 assert_syntax_error "m.a (1, &b) do end", BLOCK_DUP_MSG end def test_double_block_error_15 assert_syntax_error "m::a (1, &b) { }", BLOCK_DUP_MSG end def test_double_block_error_16 assert_syntax_error "m::a (1, &b) do end", BLOCK_DUP_MSG end end class TestRubyParserV19 < RubyParserTestCase include TestRubyParserShared include TestRubyParserShared19Plus def setup super self.processor = RubyParser::V19.new end end class TestRubyParserV20 < RubyParserTestCase include TestRubyParserShared include TestRubyParserShared19Plus include TestRubyParserShared20Plus def setup super self.processor = RubyParser::V20.new end def test_defn_unary_not rb = "def !@; true; end" # I seriously HATE this pt = s(:defn, :"!@", s(:args), s(:true)) assert_parse rb, pt end end class TestRubyParserV21 < RubyParserTestCase include TestRubyParserShared include TestRubyParserShared19Plus include TestRubyParserShared20Plus include TestRubyParserShared21Plus def setup super self.processor = RubyParser::V21.new end end class TestRubyParserV22 < RubyParserTestCase include TestRubyParserShared include TestRubyParserShared19Plus include TestRubyParserShared20Plus include TestRubyParserShared21Plus include TestRubyParserShared22Plus def setup super self.processor = RubyParser::V22.new end end class TestRubyParserV23 < RubyParserTestCase include TestRubyParserShared include TestRubyParserShared19Plus include TestRubyParserShared20Plus include TestRubyParserShared21Plus include TestRubyParserShared22Plus include TestRubyParserShared23Plus def setup super self.processor = RubyParser::V23.new end end class TestRubyParserV24 < RubyParserTestCase include TestRubyParserShared include TestRubyParserShared19Plus include TestRubyParserShared20Plus include TestRubyParserShared21Plus include TestRubyParserShared22Plus include TestRubyParserShared23Plus include TestRubyParserShared24Plus def setup super self.processor = RubyParser::V24.new end end class TestRubyParserV25 < RubyParserTestCase include TestRubyParserShared include TestRubyParserShared19Plus include TestRubyParserShared20Plus include TestRubyParserShared21Plus include TestRubyParserShared22Plus include TestRubyParserShared23Plus include TestRubyParserShared24Plus include TestRubyParserShared25Plus def setup super self.processor = RubyParser::V25.new end end RubyParser::VERSIONS.each do |klass| v = klass.version describe "block args arity #{v}" do attr_accessor :parser before do self.parser = RubyParser.const_get("V#{v}").new end { "-> { }" => s(:iter, s(:call, nil, :lambda), 0), "lambda { }" => s(:iter, s(:call, nil, :lambda), 0), "proc { }" => s(:iter, s(:call, nil, :proc), 0), "Proc.new { }" => s(:iter, s(:call, s(:const, :Proc), :new), 0), "-> () { }" => s(:iter, s(:call, nil, :lambda), s(:args)), "lambda { || }" => s(:iter, s(:call, nil, :lambda), s(:args)), "proc { || }" => s(:iter, s(:call, nil, :proc), s(:args)), "Proc.new { || }" => s(:iter, s(:call, s(:const, :Proc), :new), s(:args)), }.each do |input, expected| next if v == 18 and input =~ /->/ next if v == 19 and input =~ /-> \(\)/ it "parses '#{input}'" do assert_equal expected, parser.parse(input) end input = input.sub(/\{/, "do").sub(/\}/, "end") it "parses '#{input}'" do assert_equal expected, parser.parse(input) end end end end ruby_parser-3.11.0/test/test_ruby_parser_extras.rb0000444000004100000410000001426613277753330022470 0ustar www-datawww-data# encoding: US-ASCII require "minitest/autorun" require "ruby_parser_extras" require "ruby_parser" class TestStackState < Minitest::Test attr_reader :s def setup @s = RubyParserStuff::StackState.new :test end def assert_encoding str, default = false orig_str = str.dup p = RubyParser.latest s = nil out, err = capture_io do s = p.handle_encoding str end assert_equal orig_str.sub(/\357\273\277/, ''), s exp_err = "" if defined?(Encoding) then assert_equal "UTF-8", s.encoding.to_s, str.inspect else exp_err = "Skipping magic encoding comment\n" unless default end assert_equal "", out, str.inspect assert_equal exp_err, err, str.inspect # HACK end def test_handle_encoding_bom # bom support, default to utf-8 assert_encoding "\xEF\xBB\xBF# blah" # we force_encode to US-ASCII, then encode to UTF-8 so our lexer will work assert_encoding "\xEF\xBB\xBF# encoding: US-ASCII" end def test_handle_encoding_default assert_encoding "blah", :default end def test_handle_encoding_emacs # Q: how many different ways can we screw these up? A: ALL OF THEM assert_encoding "# - encoding: utf-8 -" assert_encoding "# - encoding:utf-8" assert_encoding "# -* coding: UTF-8 -*-" assert_encoding "# -*- coding: UTF-8 -*-" assert_encoding "# -*- coding: utf-8 -*" assert_encoding "# -*- coding: utf-8 -*-" assert_encoding "# -*- coding: utf-8; mode: ruby -*-" assert_encoding "# -*- coding: utf-8; mode: ruby; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2" assert_encoding "# -*- coding:utf-8; mode:ruby; -*-" assert_encoding "# -*- encoding: UTF-8 -*-" assert_encoding "# -*- encoding: utf-8 -*" assert_encoding "# -*- encoding: utf-8 -*-" assert_encoding "# -*- mode:ruby; coding:utf-8 -*-" assert_encoding "# -*- ruby encoding: utf-8 -*-" assert_encoding "# -- encoding: utf-8 --" assert_encoding "# ~*~ encoding: utf-8 ~*~" assert_encoding "#-*- coding: utf-8 -*-" assert_encoding "#-*- coding:utf-8" assert_encoding "#-- -*- mode: ruby; encoding: utf-8 -*-\n" end def test_handle_encoding_wtf assert_encoding "# coding : utf-8" assert_encoding "# Ruby 1.9: encoding: utf-8" assert_encoding "# Encoding: UTF-8 <-- required, please leave this in." assert_encoding "# Encoding: UTF-8" assert_encoding "# coding: utf-8" assert_encoding "# coding:utf-8" assert_encoding "# coding=utf-8" assert_encoding "# encoding: ASCII" assert_encoding "# encoding: ASCII-8BIT" assert_encoding "# encoding: ISO-8859-1" assert_encoding "# encoding: UTF-8" assert_encoding "# encoding: ascii-8bit" assert_encoding "# encoding: cp1252" assert_encoding "# encoding: euc-jp -*-" assert_encoding "# encoding: utf-8 # -*- ruby -*-" assert_encoding "# encoding: utf-8 require 'github_api/utils/url'" assert_encoding "# encoding: utf-8!" assert_encoding "# encoding: utf-8" assert_encoding "#" assert_encoding "#Encoding: UTF-8" assert_encoding "#coding:utf-8" assert_encoding "#encoding: UTF-8!" assert_encoding "#encoding: UTF-8" assert_encoding "#encoding: cp1252" assert_encoding "#encoding: sjis" assert_encoding "#encoding: utf-8" end def test_handle_encoding_normal assert_encoding "# encoding: UTF-8" assert_encoding "# encoding: UTF-8\r\n" # UGH I hate windoze assert_encoding "# coding: UTF-8" assert_encoding "# encoding = UTF-8" assert_encoding "# coding = UTF-8" end def test_handle_encoding_vim assert_encoding "# vim: set fileencoding=utf-8 filetype=ruby ts=2 : " assert_encoding "# vim: fileencoding=UTF-8 ft=ruby syn=ruby ts=2 sw=2 ai eol et si" assert_encoding "# vim: fileencoding=UTF-8 nobomb sw=2 ts=2 et" assert_encoding "# vim: filetype=ruby, fileencoding=UTF-8, tabsize=2, shiftwidth=2" assert_encoding "# vim: set fileencoding=utf-8" assert_encoding "# vim:encoding=UTF-8:" assert_encoding "# vim:fileencoding=UTF-8:" assert_encoding "# vim:set fileencoding=utf-8 filetype=ruby" assert_encoding "# vim:set fileencoding=utf-8:" end def test_stack_state s.push true s.push false s.lexpop assert_equal [false, true], s.stack end def test_is_in_state assert_equal false, s.is_in_state s.push false assert_equal false, s.is_in_state s.push true assert_equal true, s.is_in_state s.push false assert_equal false, s.is_in_state end def test_lexpop assert_equal [false], s.stack s.push true s.push false assert_equal [false, true, false], s.stack s.lexpop assert_equal [false, true], s.stack end def test_pop assert_equal [false], s.stack s.push true assert_equal [false, true], s.stack assert_equal true, s.pop assert_equal [false], s.stack end def test_push assert_equal [false], s.stack s.push true s.push false assert_equal [false, true, false], s.stack end end class TestEnvironment < Minitest::Test def deny t assert ! t end def setup @env = RubyParserStuff::Environment.new @env[:blah] = 42 assert_equal 42, @env[:blah] end def test_var_scope_dynamic @env.extend :dynamic assert_equal 42, @env[:blah] @env.unextend assert_equal 42, @env[:blah] end def test_var_scope_static @env.extend assert_nil @env[:blah] @env.unextend assert_equal 42, @env[:blah] end def test_all_dynamic expected = { :blah => 42 } @env.extend :dynamic assert_equal expected, @env.all @env.unextend assert_equal expected, @env.all end def test_all_static @env.extend expected = { } assert_equal expected, @env.all @env.unextend expected = { :blah => 42 } assert_equal expected, @env.all end def test_all_static_deeper expected0 = { :blah => 42 } expected1 = { :blah => 42, :blah2 => 24 } expected2 = { :blah => 27 } @env.extend :dynamic @env[:blah2] = 24 assert_equal expected1, @env.all @env.extend @env[:blah] = 27 assert_equal expected2, @env.all @env.unextend assert_equal expected1, @env.all @env.unextend assert_equal expected0, @env.all end end ruby_parser-3.11.0/test/test_ruby_lexer.rb0000555000004100000410000025566513277753330020742 0ustar www-datawww-data# encoding: US-ASCII require "minitest/autorun" require "ruby_lexer" require "ruby_parser" class TestRubyLexer < Minitest::Test attr_accessor :processor, :lex, :parser_class, :lex_state alias :lexer :lex # lets me copy/paste code from parser alias :lexer= :lex= def setup self.lex_state = :expr_beg setup_lexer_class RubyParser.latest.class end def setup_lexer input, exp_sexp = nil setup_new_parser lex.ss = RPStringScanner.new(input) lex.lex_state = self.lex_state end def setup_new_parser self.processor = parser_class.new self.lex = processor.lexer end def setup_lexer_class parser_class self.parser_class = parser_class setup_new_parser setup_lexer "blah blah" end def assert_lex input, exp_sexp, *args, &b setup_lexer input assert_parse input, exp_sexp if exp_sexp b.call if b args.each_slice(5) do |token, value, state, paren, brace| assert_next_lexeme token, value, state, paren, brace end refute_lexeme end def assert_lex3 input, exp_sexp, *args, &block args = args.each_slice(3).map { |a, b, c| [a, b, c, nil, nil] }.flatten assert_lex(input, exp_sexp, *args, &block) end def ruby18 RubyParser::V18 === lexer.parser end def refute_lex input, *args # TODO: re-sort args = args.each_slice(2).map { |a, b| [a, b, nil, nil, nil] }.flatten assert_raises RubyParser::SyntaxError do assert_lex(input, nil, *args) end end def assert_lex_fname name, type, end_state = :expr_arg # TODO: swap name/type assert_lex3("def #{name} ", nil, :kDEF, "def", :expr_fname, type, name, end_state) end def assert_next_lexeme token=nil, value=nil, state=nil, paren=nil, brace=nil adv = @lex.next_token assert adv, "no more tokens" act_token, act_value = adv msg = message { act = [act_token, act_value, @lex.lex_state, @lex.paren_nest, @lex.brace_nest] exp = [token, value, state, paren, brace] "#{exp.inspect} vs #{act.inspect}" } act_value = act_value.first if Array === act_value assert_equal token, act_token, msg case value when Float then assert_in_epsilon value, act_value, 0.001, msg when NilClass then assert_nil act_value, msg else assert_equal value, act_value, msg end assert_equal state, @lex.lex_state, msg if state assert_equal paren, @lex.paren_nest, msg if paren assert_equal brace, @lex.brace_nest, msg if brace end def assert_parse input, exp_sexp assert_equal exp_sexp, processor.class.new.parse(input) end def assert_read_escape expected, input @lex.ss.string = input assert_equal expected, @lex.read_escape, input end def assert_read_escape_bad input # TODO: rename refute_read_escape @lex.ss.string = input assert_raises RubyParser::SyntaxError do @lex.read_escape end end def refute_lexeme x = y = @lex.next_token refute x, "not empty: #{y.inspect}" end ## Utility Methods: def emulate_string_interpolation lex_strterm = lexer.lex_strterm string_nest = lexer.string_nest brace_nest = lexer.brace_nest lexer.string_nest = 0 lexer.brace_nest = 0 lexer.cond.push false lexer.cmdarg.push false lexer.lex_strterm = nil lexer.lex_state = :expr_beg yield lexer.lex_state = :expr_endarg assert_next_lexeme :tRCURLY, "}", :expr_endarg, 0 lexer.lex_strterm = lex_strterm lexer.lex_state = :expr_beg lexer.string_nest = string_nest lexer.brace_nest = brace_nest lexer.cond.lexpop lexer.cmdarg.lexpop end ## Tests: def test_next_token assert_equal [:tIDENTIFIER, "blah"], @lex.next_token assert_equal [:tIDENTIFIER, "blah"], @lex.next_token assert_nil @lex.next_token end def test_unicode_ident s = "@\u1088\u1077\u1093\u1072" assert_lex3(s.dup, nil, :tIVAR, s.dup, :expr_end) end def test_read_escape assert_read_escape "\\", "\\" assert_read_escape "\n", "n" assert_read_escape "\t", "t" assert_read_escape "\r", "r" assert_read_escape "\f", "f" assert_read_escape "\13", "v" assert_read_escape "\0", "0" assert_read_escape "\07", "a" assert_read_escape "\007", "a" assert_read_escape "\033", "e" assert_read_escape "\377", "377" assert_read_escape "\377", "xff" assert_read_escape "\010", "b" assert_read_escape " ", "s" assert_read_escape "q", "q" # plain vanilla escape assert_read_escape "8", "8" # ugh... mri... WHY?!? assert_read_escape "9", "9" # ugh... mri... WHY?!? assert_read_escape "$", "444" # ugh end def test_read_escape_c assert_read_escape "\030", "C-x" assert_read_escape "\030", "cx" assert_read_escape "\230", 'C-\M-x' assert_read_escape "\230", 'c\M-x' assert_read_escape "\177", "C-?" assert_read_escape "\177", "c?" end def test_read_escape_errors assert_read_escape_bad "" assert_read_escape_bad "M" assert_read_escape_bad "M-" assert_read_escape_bad "Mx" assert_read_escape_bad "Cx" assert_read_escape_bad "C" assert_read_escape_bad "C-" assert_read_escape_bad "c" end def test_read_escape_m assert_read_escape "\370", "M-x" assert_read_escape "\230", 'M-\C-x' assert_read_escape "\230", 'M-\cx' end def test_yylex_ambiguous_uminus assert_lex3("m -3", nil, :tIDENTIFIER, "m", :expr_cmdarg, :tUMINUS_NUM, "-", :expr_beg, :tINTEGER, 3, :expr_end) # TODO: verify warning end def test_yylex_ambiguous_uplus assert_lex3("m +3", nil, :tIDENTIFIER, "m", :expr_cmdarg, :tINTEGER, 3, :expr_end) # TODO: verify warning end def test_yylex_and assert_lex3("&", nil, :tAMPER, "&", :expr_beg) end def test_yylex_and2 assert_lex3("&&", nil, :tANDOP, "&&", :expr_beg) end def test_yylex_and2_equals assert_lex3("&&=", nil, :tOP_ASGN, "&&", :expr_beg) end def test_yylex_and_dot setup_lexer_class RubyParser::V23 assert_lex3("&.", nil, :tLONELY, "&.", :expr_dot) end def test_yylex_and_dot_call setup_lexer_class RubyParser::V23 assert_lex3("x&.y", nil, :tIDENTIFIER, "x", :expr_cmdarg, :tLONELY, "&.", :expr_dot, :tIDENTIFIER, "y") end def test_yylex_and_dot_call_newline setup_lexer_class Ruby23Parser assert_lex3("x\n&.y", nil, :tIDENTIFIER, "x", :expr_cmdarg, :tLONELY, "&.", :expr_dot, :tIDENTIFIER, "y") end def test_yylex_and_arg self.lex_state = :expr_arg assert_lex3(" &y", nil, :tAMPER, "&", :expr_beg, :tIDENTIFIER, "y", :expr_arg) end def test_yylex_and_equals assert_lex3("&=", nil, :tOP_ASGN, "&", :expr_beg) end def test_yylex_and_expr self.lex_state = :expr_arg assert_lex3("x & y", nil, :tIDENTIFIER, "x", :expr_cmdarg, :tAMPER2, "&", :expr_beg, :tIDENTIFIER, "y", :expr_arg) end def test_yylex_and_meth assert_lex_fname "&", :tAMPER2 end def test_yylex_assoc assert_lex3("=>", nil, :tASSOC, "=>", :expr_beg) end def test_yylex_label__18 setup_lexer_class RubyParser::V18 assert_lex3("{a:", nil, :tLBRACE, "{", :expr_beg, :tIDENTIFIER, "a", :expr_arg, :tSYMBEG, ":", :expr_fname) end def test_yylex_label_in_params__18 setup_lexer_class RubyParser::V18 assert_lex3("foo(a:", nil, :tIDENTIFIER, "foo", :expr_cmdarg, :tLPAREN2, "(", :expr_beg, :tIDENTIFIER, "a", :expr_cmdarg, :tSYMBEG, ":", :expr_fname) end def test_yylex_label__19 setup_lexer_class RubyParser::V19 assert_lex3("{a:", nil, :tLBRACE, "{", :expr_beg, :tLABEL, "a", :expr_labelarg) end def test_yylex_label_in_params__19 setup_lexer_class RubyParser::V19 assert_lex3("foo(a:", nil, :tIDENTIFIER, "foo", :expr_cmdarg, :tLPAREN2, "(", :expr_beg, :tLABEL, "a", :expr_labelarg) end def test_yylex_paren_string_parens_interpolated setup_lexer('%((#{b}#{d}))', s(:dstr, "(", s(:evstr, s(:call, nil, :b)), s(:evstr, s(:call, nil, :d)), s(:str, ")"))) assert_next_lexeme :tSTRING_BEG, "%)", :expr_beg, 0, 0 assert_next_lexeme :tSTRING_CONTENT, "(", :expr_beg, 0, 0 assert_next_lexeme :tSTRING_DBEG, nil, :expr_beg, 0, 0 emulate_string_interpolation do assert_next_lexeme :tIDENTIFIER, "b", :expr_arg, 0, 0 end assert_next_lexeme :tSTRING_DBEG, nil, :expr_beg, 0, 0 emulate_string_interpolation do assert_next_lexeme :tIDENTIFIER, "d", :expr_arg, 0, 0 end assert_next_lexeme :tSTRING_CONTENT, ")", :expr_beg, 0, 0 assert_next_lexeme :tSTRING_END, ")", :expr_end, 0, 0 refute_lexeme end def test_yylex_paren_string_interpolated_regexp setup_lexer('%( #{(/abcd/)} )', s(:dstr, " ", s(:evstr, s(:lit, /abcd/)), s(:str, " "))) assert_next_lexeme :tSTRING_BEG, "%)", :expr_beg, 0, 0 assert_next_lexeme :tSTRING_CONTENT, " ", :expr_beg, 0, 0 assert_next_lexeme :tSTRING_DBEG, nil, :expr_beg, 0, 0 emulate_string_interpolation do assert_next_lexeme :tLPAREN, "(", :expr_beg, 1, 0 assert_next_lexeme :tREGEXP_BEG, "/", :expr_beg, 1, 0 assert_next_lexeme :tSTRING_CONTENT, "abcd", :expr_beg, 1, 0 assert_next_lexeme :tREGEXP_END, "", :expr_end, 1, 0 assert_next_lexeme :tRPAREN, ")", :expr_endfn, 0, 0 end assert_next_lexeme :tSTRING_CONTENT, " ", :expr_beg, 0, 0 assert_next_lexeme :tSTRING_END, ")", :expr_end, 0, 0 refute_lexeme end def test_yylex_not_at_defn__20 setup_lexer_class RubyParser::V20 assert_lex("def +@; end", s(:defn, :+@, s(:args), s(:nil)), :kDEF, "def", :expr_fname, 0, 0, :tUPLUS, "+@", :expr_arg, 0, 0, :tSEMI, ";", :expr_beg, 0, 0, :kEND, "end", :expr_end, 0, 0) assert_lex("def !@; end", s(:defn, :"!@", s(:args), s(:nil)), :kDEF, "def", :expr_fname, 0, 0, :tUBANG, "!@", :expr_arg, 0, 0, :tSEMI, ";", :expr_beg, 0, 0, :kEND, "end", :expr_end, 0, 0) end def test_yylex_not_at_ivar assert_lex("!@ivar", s(:call, s(:ivar, :@ivar), :"!"), :tBANG, "!", :expr_beg, 0, 0, :tIVAR, "@ivar", :expr_end, 0, 0) end def test_yylex_number_times_ident_times_return_number assert_lex("1 * b * 3", s(:call, s(:call, s(:lit, 1), :*, s(:call, nil, :b)), :*, s(:lit, 3)), :tINTEGER, 1, :expr_end, 0, 0, :tSTAR2, "*", :expr_beg, 0, 0, :tIDENTIFIER, "b", :expr_arg, 0, 0, :tSTAR2, "*", :expr_beg, 0, 0, :tINTEGER, 3, :expr_end, 0, 0) assert_lex("1 * b *\n 3", s(:call, s(:call, s(:lit, 1), :*, s(:call, nil, :b)), :*, s(:lit, 3)), :tINTEGER, 1, :expr_end, 0, 0, :tSTAR2, "*", :expr_beg, 0, 0, :tIDENTIFIER, "b", :expr_arg, 0, 0, :tSTAR2, "*", :expr_beg, 0, 0, :tINTEGER, 3, :expr_end, 0, 0) end def test_yylex_paren_string_parens_interpolated_regexp setup_lexer('%((#{(/abcd/)}))', s(:dstr, "(", s(:evstr, s(:lit, /abcd/)), s(:str, ")"))) assert_next_lexeme :tSTRING_BEG, "%)", :expr_beg, 0, 0 assert_next_lexeme :tSTRING_CONTENT, "(", :expr_beg, 0, 0 assert_next_lexeme :tSTRING_DBEG, nil, :expr_beg, 0, 0 emulate_string_interpolation do assert_next_lexeme :tLPAREN, "(", :expr_beg, 1, 0 assert_next_lexeme :tREGEXP_BEG, "/", :expr_beg, 1, 0 assert_next_lexeme :tSTRING_CONTENT, "abcd", :expr_beg, 1, 0 assert_next_lexeme :tREGEXP_END, "", :expr_end, 1, 0 assert_next_lexeme :tRPAREN, ")", :expr_endfn, 0, 0 end assert_next_lexeme :tSTRING_CONTENT, ")", :expr_beg, 0, 0 assert_next_lexeme :tSTRING_END, ")", :expr_end, 0, 0 refute_lexeme end def test_yylex_method_parens_chevron assert_lex("a()<<1", s(:call, s(:call, nil, :a), :<<, s(:lit, 1)), :tIDENTIFIER, "a", :expr_cmdarg, 0, 0, :tLPAREN2, "(", :expr_beg, 1, 0, :tRPAREN, ")", :expr_endfn, 0, 0, :tLSHFT, "<<" , :expr_beg, 0, 0, :tINTEGER, 1, :expr_end, 0, 0) end def test_yylex_lambda_args__20 setup_lexer_class RubyParser::V20 assert_lex("-> (a) { }", s(:iter, s(:call, nil, :lambda), s(:args, :a)), :tLAMBDA, nil, :expr_endfn, 0, 0, :tLPAREN2, "(", :expr_beg, 1, 0, :tIDENTIFIER, "a", :expr_arg, 1, 0, :tRPAREN, ")", :expr_endfn, 0, 0, :tLCURLY, "{", :expr_beg, 0, 1, :tRCURLY, "}", :expr_endarg, 0, 0) end def test_yylex_lambda_args_opt__20 setup_lexer_class RubyParser::V20 assert_lex("-> (a=nil) { }", s(:iter, s(:call, nil, :lambda), s(:args, s(:lasgn, :a, s(:nil)))), :tLAMBDA, nil, :expr_endfn, 0, 0, :tLPAREN2, "(", :expr_beg, 1, 0, :tIDENTIFIER, "a", :expr_arg, 1, 0, :tEQL, "=", :expr_beg, 1, 0, :kNIL, "nil", :expr_end, 1, 0, :tRPAREN, ")", :expr_endfn, 0, 0, :tLCURLY, "{", :expr_beg, 0, 1, :tRCURLY, "}", :expr_endarg, 0, 0) end def test_yylex_lambda_hash__20 setup_lexer_class RubyParser::V20 assert_lex("-> (a={}) { }", s(:iter, s(:call, nil, :lambda), s(:args, s(:lasgn, :a, s(:hash)))), :tLAMBDA, nil, :expr_endfn, 0, 0, :tLPAREN2, "(", :expr_beg, 1, 0, :tIDENTIFIER, "a", :expr_arg, 1, 0, :tEQL, "=", :expr_beg, 1, 0, :tLBRACE, "{", :expr_beg, 1, 1, :tRCURLY, "}", :expr_endarg, 1, 0, :tRPAREN, ")", :expr_endfn, 0, 0, :tLCURLY, "{", :expr_beg, 0, 1, :tRCURLY, "}", :expr_endarg, 0, 0) end def test_yylex_iter_array_curly assert_lex("f :a, [:b] { |c, d| }", # yes, this is bad code s(:iter, s(:call, nil, :f, s(:lit, :a), s(:array, s(:lit, :b))), s(:args, :c, :d)), :tIDENTIFIER, "f", :expr_cmdarg, 0, 0, :tSYMBOL, "a", :expr_end, 0, 0, :tCOMMA, ",", :expr_beg, 0, 0, :tLBRACK, "[", :expr_beg, 1, 0, :tSYMBOL, "b", :expr_end, 1, 0, :tRBRACK, "]", :expr_endarg, 0, 0, :tLBRACE_ARG, "{", :expr_beg, 0, 1, :tPIPE, "|", :expr_beg, 0, 1, :tIDENTIFIER, "c", :expr_arg, 0, 1, :tCOMMA, ",", :expr_beg, 0, 1, :tIDENTIFIER, "d", :expr_arg, 0, 1, :tPIPE, "|", :expr_beg, 0, 1, :tRCURLY, "}", :expr_endarg, 0, 0) end def test_yylex_const_call_same_name assert_lex("X = a { }; b { f :c }", s(:block, s(:cdecl, :X, s(:iter, s(:call, nil, :a), 0)), s(:iter, s(:call, nil, :b), 0, s(:call, nil, :f, s(:lit, :c)))), :tCONSTANT, "X", :expr_cmdarg, 0, 0, :tEQL, "=", :expr_beg, 0, 0, :tIDENTIFIER, "a", :expr_arg, 0, 0, :tLCURLY, "{", :expr_beg, 0, 1, :tRCURLY, "}", :expr_endarg, 0, 0, :tSEMI, ";", :expr_beg, 0, 0, :tIDENTIFIER, "b", :expr_cmdarg, 0, 0, :tLCURLY, "{", :expr_beg, 0, 1, :tIDENTIFIER, "f", :expr_cmdarg, 0, 1, # different :tSYMBOL, "c", :expr_end, 0, 1, :tRCURLY, "}", :expr_endarg, 0, 0) assert_lex("X = a { }; b { X :c }", s(:block, s(:cdecl, :X, s(:iter, s(:call, nil, :a), 0)), s(:iter, s(:call, nil, :b), 0, s(:call, nil, :X, s(:lit, :c)))), :tCONSTANT, "X", :expr_cmdarg, 0, 0, :tEQL, "=", :expr_beg, 0, 0, :tIDENTIFIER, "a", :expr_arg, 0, 0, :tLCURLY, "{", :expr_beg, 0, 1, :tRCURLY, "}", :expr_endarg, 0, 0, :tSEMI, ";", :expr_beg, 0, 0, :tIDENTIFIER, "b", :expr_cmdarg, 0, 0, :tLCURLY, "{", :expr_beg, 0, 1, :tCONSTANT, "X", :expr_cmdarg, 0, 1, # same :tSYMBOL, "c", :expr_end, 0, 1, :tRCURLY, "}", :expr_endarg, 0, 0) end def test_yylex_lasgn_call_same_name assert_lex("a = b.c :d => 1", s(:lasgn, :a, s(:call, s(:call, nil, :b), :c, s(:hash, s(:lit, :d), s(:lit, 1)))), :tIDENTIFIER, "a", :expr_cmdarg, 0, 0, :tEQL, "=", :expr_beg, 0, 0, :tIDENTIFIER, "b", :expr_arg, 0, 0, :tDOT, ".", :expr_dot, 0, 0, :tIDENTIFIER, "c", :expr_arg, 0, 0, # different :tSYMBOL, "d", :expr_end, 0, 0, :tASSOC, "=>", :expr_beg, 0, 0, :tINTEGER, 1, :expr_end, 0, 0) assert_lex("a = b.a :d => 1", s(:lasgn, :a, s(:call, s(:call, nil, :b), :a, s(:hash, s(:lit, :d), s(:lit, 1)))), :tIDENTIFIER, "a", :expr_cmdarg, 0, 0, :tEQL, "=", :expr_beg, 0, 0, :tIDENTIFIER, "b", :expr_arg, 0, 0, :tDOT, ".", :expr_dot, 0, 0, :tIDENTIFIER, "a", :expr_arg, 0, 0, # same as lvar :tSYMBOL, "d", :expr_end, 0, 0, :tASSOC, "=>", :expr_beg, 0, 0, :tINTEGER, 1, :expr_end, 0, 0) end def test_yylex_back_ref assert_lex3("[$&, $`, $', $+]", nil, :tLBRACK, "[", :expr_beg, :tBACK_REF, :&, :expr_end, :tCOMMA, ",", :expr_beg, :tBACK_REF, :"`", :expr_end, :tCOMMA, ",", :expr_beg, :tBACK_REF, :"'", :expr_end, :tCOMMA, ",", :expr_beg, :tBACK_REF, :+, :expr_end, :tRBRACK, "]", :expr_endarg) end def test_yylex_backslash assert_lex3("1 \\\n+ 2", nil, :tINTEGER, 1, :expr_end, :tPLUS, "+", :expr_beg, :tINTEGER, 2, :expr_end) end def test_yylex_backslash_bad refute_lex("1 \\ + 2", :tINTEGER, 1) end def test_yylex_backtick assert_lex3("`ls`", nil, :tXSTRING_BEG, "`", :expr_beg, :tSTRING_CONTENT, "ls", :expr_beg, :tSTRING_END, "`", :expr_end) end def test_yylex_backtick_cmdarg self.lex_state = :expr_dot # \n ensures expr_cmd (TODO: why?) assert_lex3("\n`", nil, :tBACK_REF2, "`", :expr_cmdarg) end def test_yylex_backtick_dot self.lex_state = :expr_dot assert_lex3("a.`(3)", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tDOT, ".", :expr_dot, :tBACK_REF2, "`", :expr_arg, :tLPAREN2, "(", :expr_beg, :tINTEGER, 3, :expr_end, :tRPAREN, ")", :expr_endfn) end def test_yylex_backtick_method self.lex_state = :expr_fname assert_lex3("`", nil, :tBACK_REF2, "`", :expr_end) end def test_yylex_bad_char refute_lex(" \010 ") end def test_yylex_bang assert_lex3("!", nil, :tBANG, "!", :expr_beg) end def test_yylex_bang_equals assert_lex3("!=", nil, :tNEQ, "!=", :expr_beg) end def test_yylex_bang_tilde assert_lex3("!~", nil, :tNMATCH, "!~", :expr_beg) end def test_yylex_carat assert_lex3("^", nil, :tCARET, "^", :expr_beg) end def test_yylex_carat_equals assert_lex3("^=", nil, :tOP_ASGN, "^", :expr_beg) end def test_yylex_colon2 assert_lex3("A::B", nil, :tCONSTANT, "A", :expr_cmdarg, :tCOLON2, "::", :expr_dot, :tCONSTANT, "B", :expr_arg) end def test_yylex_colon2_argh assert_lex3("module X::Y\n c\nend", nil, :kMODULE, "module", :expr_value, :tCONSTANT, "X", :expr_arg, :tCOLON2, "::", :expr_dot, :tCONSTANT, "Y", :expr_arg, :tNL, nil, :expr_beg, :tIDENTIFIER, "c", :expr_cmdarg, :tNL, nil, :expr_beg, :kEND, "end", :expr_end) end def test_yylex_colon3 assert_lex3("::Array", nil, :tCOLON3, "::", :expr_beg, :tCONSTANT, "Array", :expr_arg) end def test_yylex_comma assert_lex3(",", nil, :tCOMMA, ",", :expr_beg) end def test_yylex_comment assert_lex3("1 # one\n# two\n2", nil, :tINTEGER, 1, :expr_end, :tNL, nil, :expr_beg, :tINTEGER, 2, :expr_end) assert_equal "# one\n# two\n", @lex.comments end def test_yylex_comment_begin assert_lex3("=begin\nblah\nblah\n=end\n42", nil, :tINTEGER, 42, :expr_end) assert_equal "=begin\nblah\nblah\n=end\n", @lex.comments end def test_yylex_comment_begin_bad refute_lex("=begin\nblah\nblah\n") assert_equal "", @lex.comments end def test_yylex_comment_begin_not_comment assert_lex3("beginfoo = 5\np x \\\n=beginfoo", nil, :tIDENTIFIER, "beginfoo", :expr_cmdarg, :tEQL, "=", :expr_beg, :tINTEGER, 5, :expr_end, :tNL, nil, :expr_beg, :tIDENTIFIER, "p", :expr_cmdarg, :tIDENTIFIER, "x", :expr_arg, :tEQL, "=", :expr_beg, :tIDENTIFIER, "beginfoo", :expr_arg) end def test_yylex_comment_begin_space assert_lex3("=begin blah\nblah\n=end\n", nil) assert_equal "=begin blah\nblah\n=end\n", @lex.comments end def test_yylex_comment_end_space_and_text assert_lex3("=begin blah\nblah\n=end blab\n", nil) assert_equal "=begin blah\nblah\n=end blab\n", @lex.comments end def test_yylex_comment_eos assert_lex3("# comment", nil) end def test_yylex_constant assert_lex3("ArgumentError", nil, :tCONSTANT, "ArgumentError", :expr_cmdarg) end def test_yylex_constant_semi assert_lex3("ArgumentError;", nil, :tCONSTANT, "ArgumentError", :expr_cmdarg, :tSEMI, ";", :expr_beg) end def test_yylex_cvar assert_lex3("@@blah", nil, :tCVAR, "@@blah", :expr_end) end def test_yylex_cvar_bad assert_raises RubyParser::SyntaxError do assert_lex3("@@1", nil) end end def test_yylex_def_bad_name self.lex_state = :expr_fname refute_lex("def [ ", :kDEF, "def") end def test_yylex_div assert_lex3("a / 2", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tDIVIDE, "/", :expr_beg, :tINTEGER, 2, :expr_end) end def test_yylex_div_equals assert_lex3("a /= 2", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tOP_ASGN, "/", :expr_beg, :tINTEGER, 2, :expr_end) end def test_yylex_do assert_lex3("x do 42 end", nil, :tIDENTIFIER, "x", :expr_cmdarg, :kDO, "do", :expr_beg, :tINTEGER, 42, :expr_end, :kEND, "end", :expr_end) end def test_yylex_do_block self.lex_state = :expr_endarg assert_lex3("x.y do 42 end", nil, :tIDENTIFIER, "x", :expr_end, :tDOT, ".", :expr_dot, :tIDENTIFIER, "y", :expr_arg, :kDO_BLOCK, "do", :expr_beg, :tINTEGER, 42, :expr_end, :kEND, "end", :expr_end) do @lex.cmdarg.push true end end def test_yylex_do_block2 self.lex_state = :expr_endarg assert_lex3("do 42 end", nil, :kDO_BLOCK, "do", :expr_beg, :tINTEGER, 42, :expr_end, :kEND, "end", :expr_end) end def test_yylex_is_your_spacebar_broken? assert_lex3(":a!=:b", nil, :tSYMBOL, "a", :expr_end, :tNEQ, "!=", :expr_beg, :tSYMBOL, "b", :expr_end) end def test_yylex_do_cond assert_lex3("x do 42 end", nil, :tIDENTIFIER, "x", :expr_cmdarg, :kDO_COND, "do", :expr_beg, :tINTEGER, 42, :expr_end, :kEND, "end", :expr_end) do @lex.cond.push true end end def test_yylex_dollar_bad e = refute_lex("$%") assert_includes(e.message, "is not allowed as a global variable name") end def test_yylex_dollar_eos assert_lex3("$", nil, "$", "$", :expr_end) # FIX: wtf is this?!? end def test_yylex_dot # HINT message sends assert_lex3(".", nil, :tDOT, ".", :expr_dot) end def test_yylex_dot2 assert_lex3("..", nil, :tDOT2, "..", :expr_beg) end def test_yylex_dot3 assert_lex3("...", nil, :tDOT3, "...", :expr_beg) end def test_yylex_equals # FIX: this sucks assert_lex3("=", nil, :tEQL, "=", :expr_beg) end def test_yylex_equals2 assert_lex3("==", nil, :tEQ, "==", :expr_beg) end def test_yylex_equals3 assert_lex3("===", nil, :tEQQ, "===", :expr_beg) end def test_yylex_equals_tilde assert_lex3("=~", nil, :tMATCH, "=~", :expr_beg) end def test_yylex_float assert_lex3("1.0", nil, :tFLOAT, 1.0, :expr_end) end def test_yylex_float_bad_no_underscores refute_lex "1__0.0" end def test_yylex_float_bad_no_zero_leading refute_lex ".0" end def test_yylex_float_bad_trailing_underscore refute_lex "123_.0" end def test_yylex_float_call assert_lex3("1.0.to_s", nil, :tFLOAT, 1.0, :expr_end, :tDOT, ".", :expr_dot, :tIDENTIFIER, "to_s", :expr_arg) end def test_yylex_float_dot_E assert_lex3("1.0E10", nil, :tFLOAT, 10000000000.0, :expr_end) end def test_yylex_float_dot_E_neg assert_lex3("-1.0E10", nil, :tUMINUS_NUM, "-", :expr_beg, :tFLOAT, 10000000000.0, :expr_end) end def test_yylex_float_dot_e assert_lex3("1.0e10", nil, :tFLOAT, 10000000000.0, :expr_end) end def test_yylex_float_dot_e_neg assert_lex3("-1.0e10", nil, :tUMINUS_NUM, "-", :expr_beg, :tFLOAT, 10000000000.0, :expr_end) end def test_yylex_float_e assert_lex3("1e10", nil, :tFLOAT, 10000000000.0, :expr_end) end def test_yylex_float_e_bad_double_e assert_lex3("1e2e3", nil, :tFLOAT, 100, :expr_end, :tIDENTIFIER, "e3", :expr_end) end def test_yylex_float_if_modifier assert_lex3("1e2if", nil, :tFLOAT, 100, :expr_end, :kIF_MOD, "if", :expr_beg) end def test_yylex_float_e_bad_trailing_underscore refute_lex "123_e10" end def test_yylex_float_e_minus assert_lex3("1e-10", nil, :tFLOAT, 1.0e-10, :expr_end) end def test_yylex_float_e_neg assert_lex3("-1e10", nil, :tUMINUS_NUM, "-", :expr_beg, :tFLOAT, 10000000000.0, :expr_end) end def test_yylex_float_e_neg_minus assert_lex3("-1e-10", nil, :tUMINUS_NUM, "-", :expr_beg, :tFLOAT, 1.0e-10, :expr_end) end def test_yylex_float_e_neg_plus assert_lex3("-1e+10", nil, :tUMINUS_NUM, "-", :expr_beg, :tFLOAT, 10000000000.0, :expr_end) end def test_yylex_float_e_plus assert_lex3("1e+10", nil, :tFLOAT, 10000000000.0, :expr_end) end def test_yylex_float_e_zero assert_lex3("0e0", nil, :tFLOAT, 0.0, :expr_end) end def test_yylex_float_neg assert_lex3("-1.0", nil, :tUMINUS_NUM, "-", :expr_beg, :tFLOAT, 1.0, :expr_end) end def test_yylex_ge assert_lex3("a >= 2", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tGEQ, ">=", :expr_beg, :tINTEGER, 2, :expr_end) end def test_yylex_global assert_lex3("$blah", nil, :tGVAR, "$blah", :expr_end) end def test_yylex_global_backref self.lex_state = :expr_fname assert_lex3("$`", nil, :tGVAR, "$`", :expr_end) end def test_yylex_global_dash_nothing assert_lex3("$- ", nil, :tGVAR, "$-", :expr_end) end def test_yylex_global_dash_something assert_lex3("$-x", nil, :tGVAR, "$-x", :expr_end) end def test_yylex_global_number self.lex_state = :expr_fname assert_lex3("$1", nil, :tGVAR, "$1", :expr_end) end def test_yylex_global_number_big self.lex_state = :expr_fname assert_lex3("$1234", nil, :tGVAR, "$1234", :expr_end) end def test_yylex_global_other assert_lex3("[$~, $*, $$, $?, $!, $@, $/, $\\, $;, $,, $., $=, $:, $<, $>, $\"]", nil, :tLBRACK, "[", :expr_beg, :tGVAR, "$~", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$*", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$$", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$?", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$!", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$@", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$/", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$\\", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$;", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$,", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$.", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$=", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$:", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$<", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$>", :expr_end, :tCOMMA, ",", :expr_beg, :tGVAR, "$\"", :expr_end, :tRBRACK, "]", :expr_endarg) end def test_yylex_global_underscore assert_lex3("$_", nil, :tGVAR, "$_", :expr_end) end def test_yylex_global_wierd assert_lex3("$__blah", nil, :tGVAR, "$__blah", :expr_end) end def test_yylex_global_zero assert_lex3("$0", nil, :tGVAR, "$0", :expr_end) end def test_yylex_gt assert_lex3("a > 2", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tGT, ">", :expr_beg, :tINTEGER, 2, :expr_end) end def test_yylex_heredoc_backtick assert_lex3("a = <<`EOF`\n blah blah\nEOF\n\n", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tEQL, "=", :expr_beg, :tXSTRING_BEG, "`", :expr_beg, :tSTRING_CONTENT, " blah blah\n", :expr_beg, :tSTRING_END, "EOF", :expr_end, :tNL, nil, :expr_beg) end def test_yylex_heredoc_double assert_lex3("a = <<\"EOF\"\n blah blah\nEOF\n\n", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tEQL, "=", :expr_beg, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, " blah blah\n", :expr_beg, :tSTRING_END, "EOF", :expr_end, :tNL, nil, :expr_beg) end def test_yylex_heredoc_double_dash assert_lex3("a = <<-\"EOF\"\n blah blah\n EOF\n\n", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tEQL, "=", :expr_beg, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, " blah blah\n", :expr_beg, :tSTRING_END, "EOF", :expr_end, :tNL, nil, :expr_beg) end def test_yylex_heredoc_double_squiggly setup_lexer_class Ruby23Parser assert_lex3("a = <<~\"EOF\"\n blah blah\n EOF\n\n", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tEQL, "=", :expr_beg, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, "blah blah\n", :expr_beg, :tSTRING_END, "EOF", :expr_end, :tNL, nil, :expr_beg) end # mri handles tabs in a pretty specific way: # https://github.com/ruby/ruby/blob/trunk/parse.y#L5925 def test_yylex_heredoc_double_squiggly_with_tab_indentation_remaining setup_lexer_class Ruby23Parser assert_lex3("a = <<~\"EOF\"\n blah blah\n \tblah blah\n EOF\n\n", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tEQL, "=", :expr_beg, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, "blah blah\n\tblah blah\n", :expr_beg, :tSTRING_END, "EOF", :expr_end, :tNL, nil, :expr_beg) end def test_yylex_heredoc_double_squiggly_with_tab_indentation_removed setup_lexer_class Ruby23Parser assert_lex3("a = <<~\"EOF\"\n blah blah\n\t blah blah\n EOF\n\n", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tEQL, "=", :expr_beg, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, "blah blah\n blah blah\n", :expr_beg, :tSTRING_END, "EOF", :expr_end, :tNL, nil, :expr_beg) end def test_yylex_heredoc_double_eos refute_lex("a = <<\"EOF\"\nblah", :tIDENTIFIER, "a", :tEQL, "=", :tSTRING_BEG, "\"") end def test_yylex_heredoc_double_eos_nl refute_lex("a = <<\"EOF\"\nblah\n", :tIDENTIFIER, "a", :tEQL, "=", :tSTRING_BEG, "\"") end def test_yylex_heredoc_double_interp assert_lex3("a = <<\"EOF\"\n#x a \#@a b \#$b c \#{3} \nEOF\n\n", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tEQL, "=", :expr_beg, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, "#x a ", :expr_beg, :tSTRING_DVAR, "\#@", :expr_beg, :tSTRING_CONTENT, "@a b ", :expr_beg, # HUH? :tSTRING_DVAR, "\#$", :expr_beg, :tSTRING_CONTENT, "$b c ", :expr_beg, # HUH? :tSTRING_DBEG, "\#{", :expr_beg, :tSTRING_CONTENT, "3} \n", :expr_beg, # HUH? :tSTRING_END, "EOF", :expr_end, :tNL, nil, :expr_beg) end def test_yylex_heredoc_empty assert_lex3("<<\"\"\n\#{x}\nblah2\n\n\n", nil, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_DBEG, "\#{", :expr_beg, :tSTRING_CONTENT, "x}\nblah2\n", :expr_beg, :tSTRING_END, "", :expr_end, :tNL, nil, :expr_beg) end def test_yylex_heredoc_none assert_lex3("a = <", :tCMP end def test_yylex_identifier_def__18 setup_lexer_class RubyParser::V18 assert_lex_fname "identifier", :tIDENTIFIER, :expr_end end def test_yylex_identifier_def__1920 setup_lexer_class RubyParser::V19 assert_lex_fname "identifier", :tIDENTIFIER, :expr_endfn end def test_yylex_identifier_eh assert_lex3("identifier?", nil, :tFID, "identifier?", :expr_cmdarg) end def test_yylex_identifier_equals_arrow assert_lex3(":blah==>", nil, :tSYMBOL, "blah=", :expr_end, :tASSOC, "=>", :expr_beg) end def test_yylex_identifier_equals3 assert_lex3(":a===b", nil, :tSYMBOL, "a", :expr_end, :tEQQ, "===", :expr_beg, :tIDENTIFIER, "b", :expr_arg) end def test_yylex_identifier_equals_equals_arrow assert_lex3(":a==>b", nil, :tSYMBOL, "a=", :expr_end, :tASSOC, "=>", :expr_beg, :tIDENTIFIER, "b", :expr_arg) end def test_yylex_identifier_equals_caret assert_lex_fname "^", :tCARET end def test_yylex_identifier_equals_def__18 setup_lexer_class RubyParser::V18 assert_lex_fname "identifier=", :tIDENTIFIER, :expr_end end def test_yylex_identifier_equals_def__1920 setup_lexer_class RubyParser::V19 assert_lex_fname "identifier=", :tIDENTIFIER, :expr_endfn end def test_yylex_identifier_equals_def2 assert_lex_fname "==", :tEQ end def test_yylex_identifier_equals_expr self.lex_state = :expr_dot assert_lex3("y = arg", nil, :tIDENTIFIER, "y", :expr_cmdarg, :tEQL, "=", :expr_beg, :tIDENTIFIER, "arg", :expr_arg) end def test_yylex_identifier_equals_or assert_lex_fname "|", :tPIPE end def test_yylex_identifier_equals_slash assert_lex_fname "/", :tDIVIDE end def test_yylex_identifier_equals_tilde self.lex_state = :expr_fname # can only set via parser's defs assert_lex3("identifier=~", nil, :tIDENTIFIER, "identifier", :expr_endfn, :tMATCH, "=~", :expr_beg) end def test_yylex_identifier_gt assert_lex_fname ">", :tGT end def test_yylex_identifier_le assert_lex_fname "<=", :tLEQ end def test_yylex_identifier_lt assert_lex_fname "<", :tLT end def test_yylex_identifier_tilde assert_lex_fname "~", :tTILDE end def test_yylex_index assert_lex_fname "[]", :tAREF end def test_yylex_index_equals assert_lex_fname "[]=", :tASET end def test_yylex_integer assert_lex3("42", nil, :tINTEGER, 42, :expr_end) end def test_yylex_integer_bin assert_lex3("0b101010", nil, :tINTEGER, 42, :expr_end) end def test_yylex_integer_bin_bad_none refute_lex "0b " end def test_yylex_integer_bin_bad_underscores refute_lex "0b10__01" end def test_yylex_integer_dec assert_lex3("42", nil, :tINTEGER, 42, :expr_end) end def test_yylex_integer_dec_bad_underscores refute_lex "42__24" end def test_yylex_integer_dec_d assert_lex3("0d42", nil, :tINTEGER, 42, :expr_end) end def test_yylex_integer_dec_d_bad_none refute_lex "0d" end def test_yylex_integer_dec_d_bad_underscores refute_lex "0d42__24" end def test_yylex_integer_if_modifier assert_lex3("123if", nil, :tINTEGER, 123, :expr_end, :kIF_MOD, "if", :expr_beg) end def test_yylex_question_eh_a__18 setup_lexer_class RubyParser::V18 assert_lex3("?a", nil, :tINTEGER, 97, :expr_end) end def test_yylex_question_eh_a__19 setup_lexer_class RubyParser::V19 assert_lex3("?a", nil, :tSTRING, "a", :expr_end) end def test_yylex_question_eh_escape_M_escape_C__18 setup_lexer_class RubyParser::V18 assert_lex3("?\\M-\\C-a", nil, :tINTEGER, 129, :expr_end) end def test_yylex_question_eh_escape_M_escape_C__19 setup_lexer_class RubyParser::V19 assert_lex3("?\\M-\\C-a", nil, :tSTRING, "\M-\C-a", :expr_end) end def test_yylex_integer_hex assert_lex3 "0x2a", nil, :tINTEGER, 42, :expr_end end def test_yylex_integer_hex_bad_none refute_lex "0x " end def test_yylex_integer_hex_bad_underscores refute_lex "0xab__cd" end def test_yylex_integer_oct assert_lex3("052", nil, :tINTEGER, 42, :expr_end) end def test_yylex_integer_oct_bad_range refute_lex "08" end def test_yylex_integer_oct_bad_range2 refute_lex "08" end def test_yylex_integer_oct_bad_underscores refute_lex "01__23" end def test_yylex_integer_oct_O assert_lex3 "0O52", nil, :tINTEGER, 42, :expr_end end def test_yylex_integer_oct_O_bad_range refute_lex "0O8" end def test_yylex_integer_oct_O_bad_underscores refute_lex "0O1__23" end def test_yylex_integer_oct_O_not_bad_none assert_lex3 "0O ", nil, :tINTEGER, 0, :expr_end end def test_yylex_integer_oct_o assert_lex3 "0o52", nil, :tINTEGER, 42, :expr_end end def test_yylex_integer_oct_o_bad_range refute_lex "0o8" end def test_yylex_integer_oct_o_bad_underscores refute_lex "0o1__23" end def test_yylex_integer_oct_o_not_bad_none assert_lex3 "0o ", nil, :tINTEGER, 0, :expr_end end def test_yylex_integer_trailing assert_lex3("1.to_s", nil, :tINTEGER, 1, :expr_end, :tDOT, ".", :expr_dot, :tIDENTIFIER, "to_s", :expr_arg) end def test_yylex_integer_underscore assert_lex3("4_2", nil, :tINTEGER, 42, :expr_end) end def test_yylex_integer_underscore_bad refute_lex "4__2" end def test_yylex_integer_zero assert_lex3 "0", nil, :tINTEGER, 0, :expr_end end def test_yylex_ivar assert_lex3("@blah", nil, :tIVAR, "@blah", :expr_end) end def test_yylex_ivar_bad refute_lex "@1" end def test_yylex_ivar_bad_0_length refute_lex "1+@\n", :tINTEGER, 1, :tPLUS, "+", :expr_end end def test_yylex_keyword_expr self.lex_state = :expr_endarg assert_lex3("if", nil, :kIF_MOD, "if", :expr_beg) end def test_yylex_lt assert_lex3("<", nil, :tLT, "<", :expr_beg) end def test_yylex_lt2 assert_lex3("a << b", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tLSHFT, "<<", :expr_beg, :tIDENTIFIER, "b", :expr_arg) end def test_yylex_lt2_equals assert_lex3("a <<= b", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tOP_ASGN, "<<", :expr_beg, :tIDENTIFIER, "b", :expr_arg) end def test_yylex_lt_equals assert_lex3("<=", nil, :tLEQ, "<=", :expr_beg) end def test_yylex_minus assert_lex3("1 - 2", nil, :tINTEGER, 1, :expr_end, :tMINUS, "-", :expr_beg, :tINTEGER, 2, :expr_end) end def test_yylex_minus_equals assert_lex3("-=", nil, :tOP_ASGN, "-", :expr_beg) end def test_yylex_minus_method self.lex_state = :expr_fname assert_lex3("-", nil, :tMINUS, "-", :expr_arg) end def test_yylex_minus_unary_method self.lex_state = :expr_fname assert_lex3("-@", nil, :tUMINUS, "-@", :expr_arg) end def test_yylex_minus_unary_number assert_lex3("-42", nil, :tUMINUS_NUM, "-", :expr_beg, :tINTEGER, 42, :expr_end) end def test_yylex_nth_ref assert_lex3("[$1, $2, $3, $4, $5, $6, $7, $8, $9]", nil, :tLBRACK, "[", :expr_beg, :tNTH_REF, 1, :expr_end, :tCOMMA, ",", :expr_beg, :tNTH_REF, 2, :expr_end, :tCOMMA, ",", :expr_beg, :tNTH_REF, 3, :expr_end, :tCOMMA, ",", :expr_beg, :tNTH_REF, 4, :expr_end, :tCOMMA, ",", :expr_beg, :tNTH_REF, 5, :expr_end, :tCOMMA, ",", :expr_beg, :tNTH_REF, 6, :expr_end, :tCOMMA, ",", :expr_beg, :tNTH_REF, 7, :expr_end, :tCOMMA, ",", :expr_beg, :tNTH_REF, 8, :expr_end, :tCOMMA, ",", :expr_beg, :tNTH_REF, 9, :expr_end, :tRBRACK, "]", :expr_endarg) end def test_yylex_open_bracket assert_lex3("(", nil, :tLPAREN, "(", :expr_beg) end def test_yylex_open_bracket_cmdarg self.lex_state = :expr_cmdarg assert_lex3(" (", nil, :tLPAREN_ARG, "(", :expr_beg) end def test_yylex_open_bracket_exprarg__18 setup_lexer_class RubyParser::V18 self.lex_state = :expr_arg assert_lex3(" (", nil, :tLPAREN2, "(", :expr_beg) end def test_yylex_open_bracket_exprarg__19 setup_lexer_class RubyParser::V19 self.lex_state = :expr_arg assert_lex3(" (", nil, :tLPAREN_ARG, "(", :expr_beg) end def test_yylex_open_curly_bracket assert_lex3("{", nil, :tLBRACE, "{", :expr_beg) end def test_yylex_open_curly_bracket_arg self.lex_state = :expr_arg assert_lex3("m { 3 }", nil, :tIDENTIFIER, "m", :expr_cmdarg, :tLCURLY, "{", :expr_beg, :tINTEGER, 3, :expr_end, :tRCURLY, "}", :expr_endarg) end def test_yylex_open_curly_bracket_block self.lex_state = :expr_endarg # seen m(3) assert_lex3("{ 4 }", nil, :tLBRACE_ARG, "{", :expr_beg, :tINTEGER, 4, :expr_end, :tRCURLY, "}", :expr_endarg) end def test_yylex_open_square_bracket_arg self.lex_state = :expr_arg assert_lex3("m [ 3 ]", nil, :tIDENTIFIER, "m", :expr_cmdarg, :tLBRACK, "[", :expr_beg, :tINTEGER, 3, :expr_end, :tRBRACK, "]", :expr_endarg) end def test_yylex_open_square_bracket_ary assert_lex3("[1, 2, 3]", nil, :tLBRACK, "[", :expr_beg, :tINTEGER, 1, :expr_end, :tCOMMA, ",", :expr_beg, :tINTEGER, 2, :expr_end, :tCOMMA, ",", :expr_beg, :tINTEGER, 3, :expr_end, :tRBRACK, "]", :expr_endarg) end def test_yylex_open_square_bracket_meth assert_lex3("m[3]", nil, :tIDENTIFIER, "m", :expr_cmdarg, :tLBRACK2, "[", :expr_beg, :tINTEGER, 3, :expr_end, :tRBRACK, "]", :expr_endarg) end def test_yylex_or assert_lex3("|", nil, :tPIPE, "|", :expr_beg) end def test_yylex_or2 assert_lex3("||", nil, :tOROP, "||", :expr_beg) end def test_yylex_or2_equals assert_lex3("||=", nil, :tOP_ASGN, "||", :expr_beg) end def test_yylex_or_equals assert_lex3("|=", nil, :tOP_ASGN, "|", :expr_beg) end def test_yylex_percent assert_lex3("a % 2", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tPERCENT, "%", :expr_beg, :tINTEGER, 2, :expr_end) end def test_yylex_percent_equals assert_lex3("a %= 2", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tOP_ASGN, "%", :expr_beg, :tINTEGER, 2, :expr_end) end def test_yylex_plus assert_lex3("1 + 1", # TODO lex_state? nil, :tINTEGER, 1, :expr_end, :tPLUS, "+", :expr_beg, :tINTEGER, 1, :expr_end) end def test_yylex_plus_equals assert_lex3("+=", nil, :tOP_ASGN, "+", :expr_beg) end def test_yylex_plus_method self.lex_state = :expr_fname assert_lex3("+", nil, :tPLUS, "+", :expr_arg) end def test_yylex_plus_unary_method self.lex_state = :expr_fname assert_lex3("+@", nil, :tUPLUS, "+@", :expr_arg) end def test_yylex_not_unary_method self.lex_state = :expr_fname assert_lex3("!@", nil, :tUBANG, "!@", :expr_arg) end def test_yylex_numbers assert_lex3("0b10", nil, :tINTEGER, 2, :expr_end) assert_lex3("0B10", nil, :tINTEGER, 2, :expr_end) assert_lex3("0d10", nil, :tINTEGER, 10, :expr_end) assert_lex3("0D10", nil, :tINTEGER, 10, :expr_end) assert_lex3("0x10", nil, :tINTEGER, 16, :expr_end) assert_lex3("0X10", nil, :tINTEGER, 16, :expr_end) assert_lex3("0o10", nil, :tINTEGER, 8, :expr_end) assert_lex3("0O10", nil, :tINTEGER, 8, :expr_end) assert_lex3("0o", nil, :tINTEGER, 0, :expr_end) assert_lex3("0O", nil, :tINTEGER, 0, :expr_end) assert_lex3("0", nil, :tINTEGER, 0, :expr_end) refute_lex "0x" refute_lex "0X" refute_lex "0b" refute_lex "0B" refute_lex "0d" refute_lex "0D" refute_lex "08" refute_lex "09" refute_lex "0o8" refute_lex "0o9" refute_lex "0O8" refute_lex "0O9" refute_lex "1_e1" refute_lex "1_.1" refute_lex "1__1" end def test_yylex_plus_unary_number assert_lex3("+42", nil, :tINTEGER, 42, :expr_end) end def test_yylex_question__18 setup_lexer_class RubyParser::V18 assert_lex3("?*", nil, :tINTEGER, 42, :expr_end) end def test_yylex_question__19 setup_lexer_class RubyParser::V19 assert_lex3("?*", nil, :tSTRING, "*", :expr_end) end def test_yylex_question_bad_eos refute_lex "?" end def test_yylex_question_ws assert_lex3("? ", nil, :tEH, "?", :expr_value) assert_lex3("?\n", nil, :tEH, "?", :expr_value) assert_lex3("?\t", nil, :tEH, "?", :expr_value) assert_lex3("?\v", nil, :tEH, "?", :expr_value) assert_lex3("?\r", nil, :tEH, "?", :expr_value) assert_lex3("?\f", nil, :tEH, "?", :expr_value) end def test_yylex_question_ws_backslashed__18 setup_lexer_class RubyParser::V18 assert_lex3("?\\ ", nil, :tINTEGER, 32, :expr_end) assert_lex3("?\\n", nil, :tINTEGER, 10, :expr_end) assert_lex3("?\\t", nil, :tINTEGER, 9, :expr_end) assert_lex3("?\\v", nil, :tINTEGER, 11, :expr_end) assert_lex3("?\\r", nil, :tINTEGER, 13, :expr_end) assert_lex3("?\\f", nil, :tINTEGER, 12, :expr_end) end def test_yylex_question_ws_backslashed__19 setup_lexer_class RubyParser::V19 assert_lex3("?\\ ", nil, :tSTRING, " ", :expr_end) assert_lex3("?\\n", nil, :tSTRING, "\n", :expr_end) assert_lex3("?\\t", nil, :tSTRING, "\t", :expr_end) assert_lex3("?\\v", nil, :tSTRING, "\v", :expr_end) assert_lex3("?\\r", nil, :tSTRING, "\r", :expr_end) assert_lex3("?\\f", nil, :tSTRING, "\f", :expr_end) end def test_yylex_rbracket assert_lex3("]", nil, :tRBRACK, "]", :expr_endarg) end def test_yylex_rcurly assert_lex3("}", nil, :tRCURLY, "}", :expr_endarg) end def test_yylex_regexp assert_lex3("/regexp/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regexp", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_ambiguous assert_lex3("method /regexp/", nil, :tIDENTIFIER, "method", :expr_cmdarg, :tREGEXP_BEG, "/", :expr_cmdarg, :tSTRING_CONTENT, "regexp", :expr_cmdarg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_bad refute_lex("/.*/xyz", :tREGEXP_BEG, "/", :tSTRING_CONTENT, ".*") end def test_yylex_regexp_escape_C assert_lex3("/regex\\C-x/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regex\\C-x", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_C_M assert_lex3("/regex\\C-\\M-x/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regex\\C-\\M-x", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_C_M_craaaazy assert_lex3("/regex\\C-\\\n\\M-x/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regex\\C-\\M-x", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_C_bad_dash refute_lex '/regex\\Cx/', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_C_bad_dash_eos refute_lex '/regex\\C-/', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_C_bad_dash_eos2 refute_lex '/regex\\C-', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_C_bad_eos refute_lex '/regex\\C/', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_C_bad_eos2 refute_lex '/regex\\c', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_M assert_lex3("/regex\\M-x/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regex\\M-x", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_M_C assert_lex3("/regex\\M-\\C-x/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regex\\M-\\C-x", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_M_bad_dash refute_lex '/regex\\Mx/', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_M_bad_dash_eos refute_lex '/regex\\M-/', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_M_bad_dash_eos2 refute_lex '/regex\\M-', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_M_bad_eos refute_lex '/regex\\M/', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_backslash_slash assert_lex3("/\\//", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "\\/", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_backslash_terminator assert_lex3("%r%blah\\%blah%", nil, :tREGEXP_BEG, "%r\000", :expr_beg, :tSTRING_CONTENT, "blah\\%blah", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escaped_delim assert_lex3("%r!blah(?\\!blah)!", nil, :tREGEXP_BEG, "%r\000", :expr_beg, :tSTRING_CONTENT, "blah(?!blah)", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_backslash_terminator_meta1 assert_lex3("%r{blah\\}blah}", nil, :tREGEXP_BEG, "%r{", :expr_beg, # FIX ?!? :tSTRING_CONTENT, "blah\\}blah", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_backslash_terminator_meta2 assert_lex3("%r/blah\\/blah/", nil, :tREGEXP_BEG, "%r\000", :expr_beg, :tSTRING_CONTENT, "blah\\/blah", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_backslash_terminator_meta3 assert_lex3("%r/blah\\%blah/", nil, :tREGEXP_BEG, "%r\000", :expr_beg, :tSTRING_CONTENT, "blah\\%blah", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_bad_eos refute_lex '/regex\\', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_bs assert_lex3("/regex\\\\regex/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regex\\\\regex", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_c assert_lex3("/regex\\cxxx/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regex\\cxxx", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_c_backslash assert_lex3("/regex\\c\\n/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regex\\c\\n", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_chars assert_lex3("/re\\tge\\nxp/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "re\\tge\\nxp", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_double_backslash regexp = '/[\\/\\\\]$/' assert_lex3(regexp.dup, nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "[\\/\\\\]$", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_hex assert_lex3("/regex\\x61xp/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regex\\x61xp", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_hex_bad refute_lex '/regex\\xzxp/', :tREGEXP_BEG, "/" end def test_yylex_regexp_escape_hex_one assert_lex3("/^[\\xd\\xa]{2}/on", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "^[\\xd\\xa]{2}", :expr_beg, :tREGEXP_END, "on", :expr_end) end def test_yylex_regexp_escape_oct1 assert_lex3("/regex\\0xp/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regex\\0xp", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_oct2 assert_lex3("/regex\\07xp/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regex\\07xp", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_oct3 assert_lex3("/regex\\10142/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regex\\10142", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_escape_return assert_lex3("/regex\\\nregex/", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, "regexregex", :expr_beg, :tREGEXP_END, "", :expr_end) end def test_yylex_regexp_nm assert_lex3("/.*/nm", nil, :tREGEXP_BEG, "/", :expr_beg, :tSTRING_CONTENT, ".*", :expr_beg, :tREGEXP_END, "nm", :expr_end) end def test_yylex_rparen assert_lex3(")", nil, :tRPAREN, ")", :expr_endfn) end def test_yylex_rshft assert_lex3("a >> 2", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tRSHFT, ">>", :expr_beg, :tINTEGER, 2, :expr_end) end def test_yylex_rshft_equals assert_lex3("a >>= 2", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tOP_ASGN, ">>", :expr_beg, :tINTEGER, 2, :expr_end) end def test_yylex_star assert_lex3("a * ", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tSTAR2, "*", :expr_beg) end def test_yylex_star2 assert_lex3("a ** ", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tPOW, "**", :expr_beg) end def test_yylex_star2_equals assert_lex3("a **= ", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tOP_ASGN, "**", :expr_beg) end def test_yylex_star_arg self.lex_state = :expr_arg assert_lex3(" *a", nil, :tSTAR, "*", :expr_beg, :tIDENTIFIER, "a", :expr_arg) end def test_yylex_star_arg_beg self.lex_state = :expr_beg assert_lex3("*a", nil, :tSTAR, "*", :expr_beg, :tIDENTIFIER, "a", :expr_arg) end def test_yylex_star_arg_beg_fname self.lex_state = :expr_fname assert_lex3("*a", nil, :tSTAR2, "*", :expr_arg, :tIDENTIFIER, "a", :expr_arg) end def test_yylex_star_arg_beg_fname2 self.lex_state = :expr_fname assert_lex3("*a", nil, :tSTAR2, "*", :expr_arg, :tIDENTIFIER, "a", :expr_arg) end def test_yylex_star_equals assert_lex3("a *= ", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tOP_ASGN, "*", :expr_beg) end def test_yylex_string_bad_eos refute_lex('%', :tSTRING_BEG, '%') end def test_yylex_string_bad_eos_quote refute_lex('%{nest', :tSTRING_BEG, '%}') end def test_yylex_string_double assert_lex3("\"string\"", nil, :tSTRING, "string", :expr_end) end def test_yylex_string_double_escape_C assert_lex3("\"\\C-a\"", nil, :tSTRING, "\001", :expr_end) end def test_yylex_string_double_escape_C_backslash assert_lex3("\"\\C-\\\\\"", nil, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, "\034", :expr_beg, :tSTRING_END, "\"", :expr_end) end def test_yylex_string_double_escape_C_escape assert_lex3("\"\\C-\\M-a\"", nil, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, "\201", :expr_beg, :tSTRING_END, "\"", :expr_end) end def test_yylex_string_double_escape_C_question assert_lex3("\"\\C-?\"", nil, :tSTRING, "\177", :expr_end) end def test_yylex_string_utf8_simple chr = [0x3024].pack("U") assert_lex3('"\u{3024}"', s(:str, chr), :tSTRING, chr, :expr_end) end def test_yylex_string_utf8_complex chr = [0x3024].pack("U") assert_lex3('"#@a\u{3024}"', s(:dstr, "", s(:evstr, s(:ivar, :@a)), s(:str, chr)), :tSTRING_BEG, '"', :expr_beg, :tSTRING_DVAR, nil, :expr_beg, :tSTRING_CONTENT, "@a"+chr, :expr_beg, :tSTRING_END, '"', :expr_end) end def test_yylex_string_double_escape_M chr = "\341" chr.force_encoding("UTF-8") if RubyLexer::HAS_ENC assert_lex3("\"\\M-a\"", nil, :tSTRING, chr, :expr_end) end def test_why_does_ruby_hate_me? assert_lex3("\"Nl%\\000\\000A\\000\\999\"", # you should be ashamed nil, :tSTRING, ["Nl%","\x00","\x00","A","\x00","999"].join, :expr_end) end def test_yylex_string_double_escape_M_backslash assert_lex3("\"\\M-\\\\\"", nil, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, "\334", :expr_beg, :tSTRING_END, "\"", :expr_end) end def test_yylex_string_double_escape_M_escape assert_lex3("\"\\M-\\C-a\"", nil, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, "\201", :expr_beg, :tSTRING_END, "\"", :expr_end) end def test_yylex_string_double_escape_bs1 assert_lex3("\"a\\a\\a\"", nil, :tSTRING, "a\a\a", :expr_end) end def test_yylex_string_double_escape_bs2 assert_lex3("\"a\\\\a\"", nil, :tSTRING, "a\\a", :expr_end) end def test_yylex_string_double_escape_c assert_lex3("\"\\ca\"", nil, :tSTRING, "\001", :expr_end) end def test_yylex_string_double_escape_c_backslash assert_lex3("\"\\c\\\"", nil, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, "\034", :expr_beg, :tSTRING_END, "\"", :expr_end) end def test_yylex_string_double_escape_c_escape assert_lex3("\"\\c\\M-a\"", nil, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, "\201", :expr_beg, :tSTRING_END, "\"", :expr_end) end def test_yylex_string_double_escape_c_question assert_lex3("\"\\c?\"", nil, :tSTRING, "\177", :expr_end) end def test_yylex_string_double_escape_chars assert_lex3("\"s\\tri\\ng\"", nil, :tSTRING, "s\tri\ng", :expr_end) end def test_yylex_string_double_escape_hex assert_lex3("\"n = \\x61\\x62\\x63\"", nil, :tSTRING, "n = abc", :expr_end) end def test_yylex_string_double_escape_octal assert_lex3("\"n = \\101\\102\\103\"", nil, :tSTRING, "n = ABC", :expr_end) end def test_yylex_string_double_escape_octal_fucked assert_lex3("\"n = \\444\"", nil, :tSTRING, "n = $", :expr_end) end def test_yylex_string_double_interp assert_lex3("\"blah #x a \#@a b \#$b c \#{3} # \"", nil, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, "blah #x a ", :expr_beg, :tSTRING_DVAR, nil, :expr_beg, :tSTRING_CONTENT, "@a b ", :expr_beg, :tSTRING_DVAR, nil, :expr_beg, :tSTRING_CONTENT, "$b c ", :expr_beg, :tSTRING_DBEG, nil, :expr_beg, :tSTRING_CONTENT, "3} # ", :expr_beg, :tSTRING_END, "\"", :expr_end) end def test_yylex_string_double_pound_dollar_bad skip if ruby18 assert_lex3('"#$%"', nil, :tSTRING_BEG, "\"", :expr_beg, :tSTRING_CONTENT, '#$%', :expr_beg, :tSTRING_END, "\"", :expr_end) end def test_yylex_string_double_nested_curlies assert_lex3("%{nest{one{two}one}nest}", nil, :tSTRING_BEG, "%}", :expr_beg, :tSTRING_CONTENT, "nest{one{two}one}nest", :expr_beg, :tSTRING_END, "}", :expr_end) end def test_yylex_string_double_no_interp assert_lex3("\"# blah\"", nil, :tSTRING, "# blah", :expr_end) assert_lex3("\"blah # blah\"", nil, :tSTRING, "blah # blah", :expr_end) end def test_yylex_string_escape_x_single assert_lex3("\"\\x0\"", nil, :tSTRING, "\000", :expr_end) end def test_yylex_string_pct_i assert_lex3("%i[s1 s2\ns3]", nil, :tQSYMBOLS_BEG, "%i[", :expr_beg, :tSTRING_CONTENT, "s1", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_CONTENT, "s2", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_CONTENT, "s3", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_END, nil, :expr_end) end def test_yylex_string_pct_I assert_lex3("%I[s1 s2\ns3]", nil, :tSYMBOLS_BEG, "%I[", :expr_beg, :tSTRING_CONTENT, "s1", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_CONTENT, "s2", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_CONTENT, "s3", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_END, nil, :expr_end) end def test_yylex_string_pct_i_extra_space assert_lex3("%i[ s1 s2\ns3 ]", nil, :tQSYMBOLS_BEG, "%i[", :expr_beg, :tSTRING_CONTENT, "s1", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_CONTENT, "s2", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_CONTENT, "s3", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_END, nil, :expr_end) end def test_yylex_string_pct_I_extra_space assert_lex3("%I[ s1 s2\ns3 ]", nil, :tSYMBOLS_BEG, "%I[", :expr_beg, :tSTRING_CONTENT, "s1", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_CONTENT, "s2", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_CONTENT, "s3", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_END, nil, :expr_end) end def test_yylex_string_pct_q assert_lex3("%q[s1 s2]", nil, :tSTRING_BEG, "%q[", :expr_beg, :tSTRING_CONTENT, "s1 s2", :expr_beg, :tSTRING_END, "]", :expr_end) end def test_yylex_string_pct_Q assert_lex3("%Q[s1 s2]", nil, :tSTRING_BEG, "%Q[", :expr_beg, :tSTRING_CONTENT, "s1 s2", :expr_beg, :tSTRING_END, "]", :expr_end) end def test_yylex_string_pct_W assert_lex3("%W[s1 s2\ns3]", # TODO: add interpolation to these nil, :tWORDS_BEG, "%W[", :expr_beg, :tSTRING_CONTENT, "s1", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_CONTENT, "s2", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_CONTENT, "s3", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_END, nil, :expr_end) end def test_yylex_string_pct_W_bs_nl assert_lex3("%W[s1 \\\ns2]", # TODO: add interpolation to these nil, :tWORDS_BEG, "%W[", :expr_beg, :tSTRING_CONTENT, "s1", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_CONTENT, "\ns2", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_END, nil, :expr_end) end def test_yylex_string_pct_angle assert_lex3("%", nil, :tSTRING_BEG, "%>", :expr_beg, :tSTRING_CONTENT, "blah", :expr_beg, :tSTRING_END, ">", :expr_end) end def test_yylex_string_pct_other assert_lex3("%%blah%", nil, :tSTRING_BEG, "%%", :expr_beg, :tSTRING_CONTENT, "blah", :expr_beg, :tSTRING_END, "%", :expr_end) end def test_yylex_string_pct_w refute_lex("%w[s1 s2 ", :tQWORDS_BEG, "%w[", :tSTRING_CONTENT, "s1", :tSPACE, nil, :tSTRING_CONTENT, "s2", :tSPACE, nil) end def test_yylex_string_pct_w_bs_nl assert_lex3("%w[s1 \\\ns2]", nil, :tQWORDS_BEG, "%w[", :expr_beg, :tSTRING_CONTENT, "s1", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_CONTENT, "\ns2", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_END, nil, :expr_end) end def test_yylex_string_pct_w_bs_sp assert_lex3("%w[s\\ 1 s\\ 2]", nil, :tQWORDS_BEG, "%w[", :expr_beg, :tSTRING_CONTENT, "s 1", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_CONTENT, "s 2", :expr_beg, :tSPACE, nil, :expr_beg, :tSTRING_END, nil, :expr_end) end def test_yylex_string_single assert_lex3("'string'", nil, :tSTRING, "string", :expr_end) end def test_yylex_string_single_escape_chars assert_lex3("'s\\tri\\ng'", nil, :tSTRING, "s\\tri\\ng", :expr_end) end def test_yylex_string_single_nl assert_lex3("'blah\\\nblah'", nil, :tSTRING, "blah\\\nblah", :expr_end) end def test_yylex_symbol assert_lex3(":symbol", nil, :tSYMBOL, "symbol", :expr_end) end def test_yylex_symbol_zero_byte__18 setup_lexer_class RubyParser::V18 refute_lex(":\"symbol\0\"", :tSYMBEG, ":") end def test_yylex_symbol_zero_byte assert_lex(":\"symbol\0\"", nil, :tSYMBOL, "symbol\0", :expr_end) end def test_yylex_symbol_double assert_lex3(":\"symbol\"", nil, :tSYMBOL, "symbol", :expr_end) end def test_yylex_symbol_double_interp assert_lex3(':"symbol#{1+1}"', nil, :tSYMBEG, ":", :expr_fname, :tSTRING_CONTENT, "symbol", :expr_fname, :tSTRING_DBEG, nil, :expr_fname, :tSTRING_CONTENT, "1+1}", :expr_fname, # HUH? this is BS :tSTRING_END, "\"", :expr_end) end def test_yylex_symbol_single assert_lex3(":'symbol'", nil, :tSYMBOL, "symbol", :expr_end) end def test_yylex_symbol_single_noninterp assert_lex3(':\'symbol#{1+1}\'', nil, :tSYMBOL, 'symbol#{1+1}', :expr_end) end def test_yylex_ternary1 assert_lex3("a ? b : c", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tEH, "?", :expr_value, :tIDENTIFIER, "b", :expr_arg, :tCOLON, ":", :expr_beg, :tIDENTIFIER, "c", :expr_arg) assert_lex3("a ?bb : c", # GAH! MATZ!!! nil, :tIDENTIFIER, "a", :expr_cmdarg, :tEH, "?", :expr_beg, :tIDENTIFIER, "bb", :expr_arg, :tCOLON, ":", :expr_beg, :tIDENTIFIER, "c", :expr_arg) assert_lex3("42 ?", nil, :tINTEGER, 42, :expr_end, :tEH, "?", :expr_value) end def test_yylex_tilde assert_lex3("~", nil, :tTILDE, "~", :expr_beg) end def test_yylex_tilde_unary self.lex_state = :expr_fname assert_lex3("~@", nil, :tTILDE, "~", :expr_arg) end def test_yylex_uminus assert_lex3("-blah", nil, :tUMINUS, "-", :expr_beg, :tIDENTIFIER, "blah", :expr_arg) end def test_yylex_underscore assert_lex3("_var", nil, :tIDENTIFIER, "_var", :expr_cmdarg) end def test_yylex_underscore_end assert_lex3("__END__\n", nil, RubyLexer::EOF, RubyLexer::EOF, nil) end def test_yylex_uplus assert_lex3("+blah", nil, :tUPLUS, "+", :expr_beg, :tIDENTIFIER, "blah", :expr_arg) end def test_zbug_float_in_decl assert_lex3("def initialize(u = 0.0, s = 0.0", nil, :kDEF, "def", :expr_fname, :tIDENTIFIER, "initialize", :expr_endfn, :tLPAREN2, "(", :expr_beg, :tIDENTIFIER, "u", :expr_arg, :tEQL, "=", :expr_beg, :tFLOAT, 0.0, :expr_end, :tCOMMA, ",", :expr_beg, :tIDENTIFIER, "s", :expr_arg, :tEQL, "=", :expr_beg, :tFLOAT, 0.0, :expr_end) end def test_zbug_id_equals assert_lex3("a = 0.0", nil, :tIDENTIFIER, "a", :expr_cmdarg, :tEQL, "=", :expr_beg, :tFLOAT, 0.0, :expr_end) end def test_zbug_no_spaces_in_decl assert_lex3("def initialize(u=0.0,s=0.0", nil, :kDEF, "def", :expr_fname, :tIDENTIFIER, "initialize", :expr_endfn, :tLPAREN2, "(", :expr_beg, :tIDENTIFIER, "u", :expr_arg, :tEQL, "=", :expr_beg, :tFLOAT, 0.0, :expr_end, :tCOMMA, ",", :expr_beg, :tIDENTIFIER, "s", :expr_arg, :tEQL, "=", :expr_beg, :tFLOAT, 0.0, :expr_end) end def test_pct_w_backslashes ["\t", "\n", "\r", "\v", "\f"].each do |char| next if !RubyLexer::HAS_ENC and char == "\v" assert_lex("%w[foo#{char}bar]", s(:array, s(:str, "foo"), s(:str, "bar")), :tQWORDS_BEG, "%w[", :expr_beg, 0, 0, :tSTRING_CONTENT, "foo", :expr_beg, 0, 0, :tSPACE, nil, :expr_beg, 0, 0, :tSTRING_CONTENT, "bar", :expr_beg, 0, 0, :tSPACE, nil, :expr_beg, 0, 0, :tSTRING_END, nil, :expr_end, 0, 0) end end def test_yylex_sym_quoted assert_lex(":'a'", s(:lit, :a), :tSYMBOL, "a", :expr_end, 0, 0) end def test_yylex_hash_colon assert_lex("{a:1}", s(:hash, s(:lit, :a), s(:lit, 1)), :tLBRACE, "{", :expr_beg, 0, 1, :tLABEL, "a", :expr_labelarg, 0, 1, :tINTEGER, 1, :expr_end, 0, 1, :tRCURLY, "}", :expr_endarg, 0, 0) end def test_yylex_hash_colon_quoted_22 setup_lexer_class RubyParser::V22 assert_lex("{'a':1}", s(:hash, s(:lit, :a), s(:lit, 1)), :tLBRACE, "{", :expr_beg, 0, 1, :tLABEL, "a", :expr_labelarg, 0, 1, :tINTEGER, 1, :expr_end, 0, 1, :tRCURLY, "}", :expr_endarg, 0, 0) end def test_yylex_hash_colon_quoted_symbol_22 setup_lexer_class RubyParser::V22 assert_lex("{'abc': :b}", s(:hash, s(:lit, :abc), s(:lit, :b)), :tLBRACE, "{", :expr_beg, 0, 1, :tLABEL, "abc", :expr_labelarg, 0, 1, :tSYMBOL, "b", :expr_end, 0, 1, :tRCURLY, "}", :expr_endarg, 0, 0) end def test_yylex_hash_colon_double_quoted_symbol_22 setup_lexer_class RubyParser::V22 assert_lex('{"abc": :b}', s(:hash, s(:lit, :abc), s(:lit, :b)), :tLBRACE, "{", :expr_beg, 0, 1, :tLABEL, "abc", :expr_labelarg, 0, 1, :tSYMBOL, "b", :expr_end, 0, 1, :tRCURLY, "}", :expr_endarg, 0, 0) end def test_yylex_required_kwarg_no_value_22 setup_lexer_class RubyParser::V22 assert_lex3("def foo a:, b:\nend", nil, :kDEF, "def", :expr_fname, :tIDENTIFIER, "foo", :expr_endfn, :tLABEL, "a", :expr_labelarg, :tCOMMA, ",", :expr_beg, :tLABEL, "b", :expr_labelarg, :tNL, nil, :expr_beg, :kEND, "end", :expr_end) end def test_ruby21_rational_literal setup_lexer_class RubyParser::V21 assert_lex3("10r", nil, :tRATIONAL, Rational(10), :expr_end) assert_lex3("0x10r", nil, :tRATIONAL, Rational(16), :expr_end) assert_lex3("0o10r", nil, :tRATIONAL, Rational(8), :expr_end) assert_lex3("0or", nil, :tRATIONAL, Rational(0), :expr_end) assert_lex3("0b10r", nil, :tRATIONAL, Rational(2), :expr_end) assert_lex3("1.5r", nil, :tRATIONAL, Rational(15, 10), :expr_end) assert_lex3("15e3r", nil, :tRATIONAL, Rational(15000), :expr_end) assert_lex3("15e-3r", nil, :tRATIONAL, Rational(15, 1000), :expr_end) assert_lex3("1.5e3r", nil, :tRATIONAL, Rational(1500), :expr_end) assert_lex3("1.5e-3r", nil, :tRATIONAL, Rational(15, 10000), :expr_end) assert_lex3("-10r", nil, :tUMINUS_NUM, "-", :expr_beg, :tRATIONAL, Rational(10), :expr_end) end def test_ruby21_imaginary_literal setup_lexer_class RubyParser::V21 assert_lex3("1i", nil, :tIMAGINARY, Complex(0, 1), :expr_end) assert_lex3("0x10i", nil, :tIMAGINARY, Complex(0, 16), :expr_end) assert_lex3("0o10i", nil, :tIMAGINARY, Complex(0, 8), :expr_end) assert_lex3("0oi", nil, :tIMAGINARY, Complex(0, 0), :expr_end) assert_lex3("0b10i", nil, :tIMAGINARY, Complex(0, 2), :expr_end) assert_lex3("1.5i", nil, :tIMAGINARY, Complex(0, 1.5), :expr_end) assert_lex3("15e3i", nil, :tIMAGINARY, Complex(0, 15000), :expr_end) assert_lex3("15e-3i", nil, :tIMAGINARY, Complex(0, 0.015), :expr_end) assert_lex3("1.5e3i", nil, :tIMAGINARY, Complex(0, 1500), :expr_end) assert_lex3("1.5e-3i", nil, :tIMAGINARY, Complex(0, 0.0015), :expr_end) assert_lex3("-10i", nil, :tUMINUS_NUM, "-", :expr_beg, :tIMAGINARY, Complex(0, 10), :expr_end) end def test_ruby21_rational_imaginary_literal setup_lexer_class RubyParser::V21 assert_lex3("1ri", nil, :tIMAGINARY, Complex(0, Rational(1)), :expr_end) assert_lex3("0x10ri", nil, :tIMAGINARY, Complex(0, Rational(16)), :expr_end) assert_lex3("0o10ri", nil, :tIMAGINARY, Complex(0, Rational(8)), :expr_end) assert_lex3("0ori", nil, :tIMAGINARY, Complex(0, Rational(0)), :expr_end) assert_lex3("0b10ri", nil, :tIMAGINARY, Complex(0, Rational(2)), :expr_end) assert_lex3("1.5ri", nil, :tIMAGINARY, Complex(0, Rational("1.5")), :expr_end) assert_lex3("15e3ri", nil, :tIMAGINARY, Complex(0, Rational("15e3")), :expr_end) assert_lex3("15e-3ri", nil, :tIMAGINARY, Complex(0, Rational("15e-3")), :expr_end) assert_lex3("1.5e3ri", nil, :tIMAGINARY, Complex(0, Rational("1.5e3")), :expr_end) assert_lex3("1.5e-3ri", nil, :tIMAGINARY, Complex(0, Rational("1.5e-3")), :expr_end) assert_lex3("-10ri", nil, :tUMINUS_NUM, "-", :expr_beg, :tIMAGINARY, Complex(0, Rational(10)), :expr_end) end def test_ruby21_imaginary_literal_with_succeeding_keyword skip "Currently does not tokenize correctly" setup_lexer_class RubyParser::V21 assert_lex3("1if", nil, :tINTEGER, 1, :expr_end, :kIF_MOD, "if", :expr_beg) assert_lex3("1rif", nil, :tRATIONAL, Rational(1), :expr_end, :kIF_MOD, "if", :expr_beg) assert_lex3("1.0if", nil, :tFLOAT, 1.0, :expr_end, :kIF_MOD, "if", :expr_beg) assert_lex3("1.0rif", nil, :tRATIONAL, Rational("1.0"), :expr_end, :kIF_MOD, "if", :expr_beg) flunk end end ruby_parser-3.11.0/ruby_parser.gemspec0000644000004100000410000001246613277753330020106 0ustar www-datawww-data######################################################### # This file has been automatically generated by gem2tgz # ######################################################### # -*- encoding: utf-8 -*- # stub: ruby_parser 3.11.0 ruby lib Gem::Specification.new do |s| s.name = "ruby_parser".freeze s.version = "3.11.0" s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= s.require_paths = ["lib".freeze] s.authors = ["Ryan Davis".freeze] s.cert_chain = ["-----BEGIN CERTIFICATE-----\nMIIDPjCCAiagAwIBAgIBAjANBgkqhkiG9w0BAQUFADBFMRMwEQYDVQQDDApyeWFu\nZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB\nGRYDY29tMB4XDTE3MTEyMTIxMTExMFoXDTE4MTEyMTIxMTExMFowRTETMBEGA1UE\nAwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS\nJomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda\nb9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx\ntaCPaLmfYIaFcHHCSY4hYDJijRQkLxPeB3xbOfzfLoBDbjvx5JxgJxUjmGa7xhcT\noOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh\nGiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt\nqhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV\ngBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw\nHQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBBQUAA4IB\nAQAfAXSQpsW7YSxd1csRtA/M4Zt0AMXFMd76GJ8Lgtg8G0+VFbdChRyDuDb0kPlW\nh9QQX/YABfCW8vxmssbMGrP+VGBAn7BbdTcfTlgCWrvMX1uL5aRL74nA4urKXqdW\na0nP70K4958P3GffBdtE3KGkU5xstFnXGajxuBRnL66E15KU0BNehVxdG258bdPu\nEKN6MqBPftFiev3tuwqDV11r2GquDpniYcT+Mi8/PgeAgVT/afBeVgbB3KaZeTRR\nAhXhF6Wi2GTMezlj5jlI5XV7WsJUSwTp/YiVvcmT74ZaCRvexm6EnNhkrvJJ1Xeu\nV+HB+LYYhXWitInO/eXxDrFB\n-----END CERTIFICATE-----\n".freeze] s.date = "2018-02-15" s.description = "ruby_parser (RP) is a ruby parser written in pure ruby (utilizing\nracc--which does by default use a C extension). RP's output is\nthe same as ParseTree's output: s-expressions using ruby's arrays and\nbase types.\n\nAs an example:\n\n def conditional1 arg1\n return 1 if arg1 == 0\n return 0\n end\n\nbecomes:\n\n s(:defn, :conditional1, s(:args, :arg1),\n s(:if,\n s(:call, s(:lvar, :arg1), :==, s(:lit, 0)),\n s(:return, s(:lit, 1)),\n nil),\n s(:return, s(:lit, 0)))\n\nTested against 801,039 files from the latest of all rubygems (as of 2013-05):\n\n* 1.8 parser is at 99.9739% accuracy, 3.651 sigma\n* 1.9 parser is at 99.9940% accuracy, 4.013 sigma\n* 2.0 parser is at 99.9939% accuracy, 4.008 sigma".freeze s.email = ["ryand-ruby@zenspider.com".freeze] s.executables = ["ruby_parse".freeze, "ruby_parse_extract_error".freeze] s.extra_rdoc_files = ["History.rdoc".freeze, "Manifest.txt".freeze, "README.rdoc".freeze] s.files = [".autotest".freeze, "History.rdoc".freeze, "Manifest.txt".freeze, "README.rdoc".freeze, "Rakefile".freeze, "bin/ruby_parse".freeze, "bin/ruby_parse_extract_error".freeze, "compare/normalize.rb".freeze, "lib/.document".freeze, "lib/rp_extensions.rb".freeze, "lib/rp_stringscanner.rb".freeze, "lib/ruby18_parser.rb".freeze, "lib/ruby18_parser.y".freeze, "lib/ruby19_parser.rb".freeze, "lib/ruby19_parser.y".freeze, "lib/ruby20_parser.rb".freeze, "lib/ruby20_parser.y".freeze, "lib/ruby21_parser.rb".freeze, "lib/ruby21_parser.y".freeze, "lib/ruby22_parser.rb".freeze, "lib/ruby22_parser.y".freeze, "lib/ruby23_parser.rb".freeze, "lib/ruby23_parser.y".freeze, "lib/ruby24_parser.rb".freeze, "lib/ruby24_parser.y".freeze, "lib/ruby25_parser.rb".freeze, "lib/ruby25_parser.y".freeze, "lib/ruby_lexer.rb".freeze, "lib/ruby_lexer.rex".freeze, "lib/ruby_lexer.rex.rb".freeze, "lib/ruby_parser.rb".freeze, "lib/ruby_parser.yy".freeze, "lib/ruby_parser_extras.rb".freeze, "test/test_ruby_lexer.rb".freeze, "test/test_ruby_parser.rb".freeze, "test/test_ruby_parser_extras.rb".freeze] s.homepage = "https://github.com/seattlerb/ruby_parser".freeze s.licenses = ["MIT".freeze] s.rdoc_options = ["--main".freeze, "README.rdoc".freeze] s.rubygems_version = "2.5.2.1".freeze s.summary = "ruby_parser (RP) is a ruby parser written in pure ruby (utilizing racc--which does by default use a C extension)".freeze if s.respond_to? :specification_version then s.specification_version = 4 if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then s.add_development_dependency(%q.freeze, ["~> 3.16"]) s.add_development_dependency(%q.freeze, ["~> 2.5"]) s.add_development_dependency(%q.freeze, ["~> 1.4.6"]) s.add_development_dependency(%q.freeze, ["< 11"]) s.add_development_dependency(%q.freeze, ["< 6", ">= 4.0"]) s.add_runtime_dependency(%q.freeze, ["~> 4.9"]) else s.add_dependency(%q.freeze, ["~> 3.16"]) s.add_dependency(%q.freeze, ["~> 2.5"]) s.add_dependency(%q.freeze, ["~> 1.4.6"]) s.add_dependency(%q.freeze, ["< 11"]) s.add_dependency(%q.freeze, ["< 6", ">= 4.0"]) s.add_dependency(%q.freeze, ["~> 4.9"]) end else s.add_dependency(%q.freeze, ["~> 3.16"]) s.add_dependency(%q.freeze, ["~> 2.5"]) s.add_dependency(%q.freeze, ["~> 1.4.6"]) s.add_dependency(%q.freeze, ["< 11"]) s.add_dependency(%q.freeze, ["< 6", ">= 4.0"]) s.add_dependency(%q.freeze, ["~> 4.9"]) end end ruby_parser-3.11.0/bin/0000755000004100000410000000000013277753330014743 5ustar www-datawww-dataruby_parser-3.11.0/bin/ruby_parse0000555000004100000410000000332613277753330017046 0ustar www-datawww-data#!/usr/bin/ruby -s $q ||= false $g ||= false require 'rubygems' require 'ruby_parser' require 'pp' good = bad = 0 multi = ARGV.size != 1 total_time = 0 total_loc = 0 total_kbytes = 0 times = {} locs = {} kbytes = {} class File RUBY19 = "<3".respond_to? :encoding class << self alias :binread :read unless RUBY19 end end begin ARGV.each do |file| rp = RubyParser.new loc = `wc -l #{file}`.strip.to_i size = `wc -c #{file}`.strip.to_i / 1024.0 locs[file] = loc kbytes[file] = size total_loc += loc total_kbytes += size if $q then $stderr.print "." else warn "# file = #{file} loc = #{loc}" end GC.start if $g t = Time.now begin begin rp.reset r = rp.parse(File.binread(file), file) pp r unless $q good += 1 rescue SyntaxError => e warn "SyntaxError for #{file}: #{e.message}" bad += 1 end rescue => e warn "#{e.backtrace.first} #{e.inspect.gsub(/\n/, ' ')} for #{file}" warn " #{e.backtrace.join("\n ")}" bad += 1 end t = Time.now - t times[file] = t total_time += t end rescue Interrupt # do nothing end warn "done" total = 0 times.values.each do |t| total += t end puts puts "good = #{good} bad = #{bad}" if multi puts format = "%5.2fs:%9.2f l/s:%8.2f Kb/s:%5d Kb:%5d loc:%s" times.sort_by { |f, t| -t }.each do |f, t| next if t < 0.005 loc = locs[f] size = kbytes[f] puts format % [t, loc / t, size / t, size, loc, f] end puts puts format % [total_time, total_loc / total_time, total_kbytes / total_time, total_kbytes, total_loc, "TOTAL"] unless total_time == 0 ruby_parser-3.11.0/bin/ruby_parse_extract_error0000555000004100000410000000620113277753330022004 0ustar www-datawww-data#!/usr/bin/ruby -ws $d ||= false $d ||= ENV["DELETE"] $t ||= false $t ||= ENV["DELETE_TIMEOUT"] $m ||= false $m ||= ENV["MOVE_TIMEOUT"] $q ||= false $q ||= ENV["QUIET"] $v ||= ENV["V"] || "20" $s ||= ENV["SPEED"] || false require 'rubygems' require 'ruby_parser' require 'fileutils' $parser_class = case $v when "18" then Ruby18Parser when "19" then Ruby19Parser when "20" then Ruby20Parser else abort "Unknown version #{$v.inspect}. Needs to be 18, 19, or 20" end class IO RUBY19 = "<3".respond_to? :encoding class << self alias :binread :read unless RUBY19 end end ARGV.push "-" if ARGV.empty? class Racc::Parser def extract_defs ss = lexer.ss raise "can't access source. possible encoding issue" unless ss src = ss.string pre_error = src[0...ss.pos] defs = pre_error.grep(/^ *(?:def|it)/) raise "can't figure out where the bad code starts" unless defs.last last_def_indent = defs.last[/^ */] post_error = src[ss.pos..-1] idx = post_error =~ /^#{last_def_indent}end.*/ raise "can't figure out where the bad code ends" unless idx src = pre_error + post_error[0..idx+$&.length] src.scan(/^(( *)(?:def|it) .*?^\2end)/m) end def retest_for_errors defs parser = self.class.new parser.process(defs.join("\n\n")) rescue SyntaxError, StandardError nil end end def expand path if File.directory? path then require 'find' files = [] Find.find(*Dir[path]) do |f| files << f if File.file? f end files.sort else Dir.glob path end end def process_error parser defs = parser.extract_defs if parser.retest_for_errors defs then warn "Can't reproduce error with just methods, punting..." return end catch :extract_done do (1..defs.size).each do |perm_size| defs.combination(perm_size).each do |trial| unless parser.retest_for_errors trial then puts trial.join "\n" throw :extract_done end end end end rescue RuntimeError, Racc::ParseError => e warn "# process error: #{e.message.strip}" end def process file ruby = file == "-" ? $stdin.binread : File.binread(file) time = (ENV["RP_TIMEOUT"] || 10).to_i $stderr.print "# Validating #{file}: " parser = $parser_class.new t0 = Time.now if $s parser.process(ruby, file, time) if $s then warn "good: #{Time.now - t0}" else warn "good" end File.unlink file if $d rescue Timeout::Error $exit = 1 warn "TIMEOUT parsing #{file}. Skipping." if $m then dir = File.join $m, File.dirname(file) FileUtils.mkdir_p dir FileUtils.move file, dir elsif $t then File.unlink file end rescue StandardError, SyntaxError, Racc::ParseError => e $exit = 1 warn "" warn "# error: #{e.message.strip}" unless $q warn "" return if $q process_error parser end $exit = 0 $stdout.sync = true ARGV.each do |path| expand(path).each do |file| next unless File.file? file # omg... why would you name a dir support.rb? process file end end exit $exit ruby_parser-3.11.0/data.tar.gz.sig0000444000004100000410000000040013277753330017004 0ustar www-datawww-data^w N6mNM#`iu6}2厪E\y-HY йeh' -y::'aSbz2.ܸ'a\X9ч?dqdSX2uƔ-ȯdb AN@ypL,EtO?KM ;+|s}/N| 'Gb4F}X?G&uS/Ëruby_parser-3.11.0/History.rdoc0000444000004100000410000011011613277753330016503 0ustar www-datawww-data=== 3.11.0 / 2018-02-14 * 1 major enhancement: * Expand to support ruby 2.5 parsing. * 3 bug fixes: * Fixed %r lexing when delimiter is also used in (?X) group. * Restore newline after label to detect required kwarg. (presidentbeef) * Return `s(:self)` target for `self[]` calls. (presidentbeef) === 3.10.1 / 2017-07-21 * 2 bug fixes: * Fixed identification of parser version whether Ruby##Parser or Parser::V##. * Fixed squiggly heredoc lexing when using 24 parser. === 3.10.0 / 2017-07-17 * 4 minor enhancements: * Added support for 'squiggly heredocs' (indented content). (jjoos) * Bumped oedipus_lex to ~> 2.5. * Bumped sexp_processor to ~> 4.9. * Made STRICT_SEXP=1 safe: converted indexed sexps to semantic calls where needed. * 5 bug fixes: * Clear and restore cmdarg stack around defs args and body. (presidentbeef) * Conditionalize use of sexp_body= to make it compatible w/ sexp_processor 4.9.0 * Fix up line numbers in strings with newlines and `#`. (presidentbeef) * Fixed line numbers of resbodies. * Fixed some tracking of lexical state. Fixes bug #249. === 3.9.0 / 2017-04-13 * 1 major enhancement: * Added tentative ruby 2.4 support. Probably missing things. * 13 minor enhancements: * Added RubyParser.latest. * Added RubyParser::Parser.version to make version range comparisons easier * Changed superclasses of all parsers to RubyParser::Parser * Cleaned up a lot of the version specific code to be more generic/flexible. * Documented how to add new versions in README. * Moved RubyParser from ruby_parser_extras.rb into ruby_parser.rb to fix bootstrap issues. * Renamed RubyParserStuff#get_match_node to new_match. Aliased and deprecated. * Renamed RubyParserStuff#logop to logical_op. Aliased and deprecated. * Renamed RubyParserStuff#node_assign to new_assign. Aliased and deprecated. * Renamed all parsers to RubyParser::V##. * Revamped grammar preprocessing to make adding new versions easier. * RubyParser.for_current_ruby falls back to latest if current not available. * Subclasses of RubyParser::Parser register themselves into RubyParser::VERSIONS. * 4 bug fixes: * Fixed `&.` after newline. (presidentbeef) * Fixed bug setting line number for hash literals to line of opening brace. * Fixed grammar preprocessing bug. * Properly handle kDO with no-parens stabby lambda. (presidentbeef) === 3.8.4 / 2017-01-13 * 3 bug fixes: * Fix parsing if in LHS label position. (presidentbeef) * Fixed parsing of anonymous keyword splat arg (eg f(**)). * Fixed ruby 2.4+ deprecation warnings about using Fixnum. === 3.8.3 / 2016-10-09 * 1 minor enhancement: * Support Ruby 2.1 number literals. (soutaro) * 3 bug fixes: * Fixed line numbers for strs with backslash-newlines. (maxjacobson) * Improved compatibility on tokenizing number. (soutaro) * Refactored and fixed multiline array line numbers. (ptoomey3, with changes) === 3.8.2 / 2016-05-05 * 2 bug fixes: * Fixed lex_state in interpolated strings. (whitequark) * Fixed safe operator for newline/semicolon contexts. (presidentbeef) === 3.8.1 / 2016-02-19 * 1 bug fix: * Fixed problems with tLONELY in mlhs_node. === 3.8.0 / 2016-02-18 * 1 major enhancement: * Added support for Ruby 2.3.0 and the &. operator. (presidentbeef) * 2 minor enhancements: * Add support for safe attr assign. (presidentbeef) * Added support for safe call. (presidentbeef) * 1 bug fix: * Fixed parsing of { 'a': :b }. (presidentbeef) === 3.7.3 / 2016-01-21 * 2 bug fixes: * Fixed parsing kwargs in defs with no parens. (presidentbeef) * defs should have a nil node if body is empty. === 3.7.2 / 2015-10-26 * 1 bug fix: * I hate regexen. Fixed a lexing bug confusing strings vs labels. (phiggins) === 3.7.1 / 2015-08-06 * 1 minor enhancement: * Improved understandability of lexing postfix symbols. * 2 bug fixes: * Fixed timeout caused by regexp backtracking bug w/ long strings in 2.2 parser. (presidentbeef) * Rename DEBUG env toggle to RB_LINENO_DEBUG. (tenderlove) === 3.7.0 / 2015-05-28 * 2 major enhancements: * Added preliminary support for ruby 2.2 syntax. * Now writing all 2.x parsers from one source, generating racc files. * 1 minor enhancement: * Added RubyLexer#process_label and hooked it up to "x": and 'x': productions. * 4 bug fixes: * Fixed handling of block_args to be consistent across all parse versions. * Fixed lexing of label assoc args w/ newlines in between k/v. (jeremyf) * Fixed lexing of x?'':y for ruby22 (not a label). (presidentbeef) * clear and restore cmdarg stack around def args and body. === 3.6.6 / 2015-04-13 * 1 minor enhancement: * Added expr_labelarg state (eg: a:1) * 5 bug fixes: * Fix scan logging backtrace when DEBUG=1 * Fixed kwsplat on 2.0 & 2.1. * Fixed mandatory keyword block args. (cvortmann) * Handle #$ in expanded strings/regexps where x is NOT a valid gvar name. * Invalid gvar names raise a compile error. === 3.6.5 / 2015-03-12 * 1 minor enhancement: * Add line numbers from block comments =begin/=end. (presidentbeef) === 3.6.4 / 2015-01-16 * 1 bug fix: * Removed shebangs in tests because of bugs (aka 'features') in RPM packaging tools. === 3.6.3 / 2014-09-26 * 1 bug fix: * Fixed bug caused by latest version of oedipus_lex not exporting lineno accessor. === 3.6.2 / 2014-07-18 * 1 bug fix: * Handle return/next/break/yield w/ block call (WHY). === 3.6.1 / 2014-05-12 * 1 bug fix: * Strings that don't match the encoding of the file are now returned as ASCII-8BIT. === 3.6.0 / 2014-04-23 * 1 minor enhancement: * Added new_string and switched all parsers to it. * 1 bug fix: * Fixed line numbers of nodes following multi-line strings. (presidentbeef) === 3.5.0 / 2014-03-24 * 1 major enhancement: * Added initial support for ruby 2.1 syntax. Doesn't have numeric extensions yet. * 2 minor enhancements: * Converted ruby_lexer.rex to use new grouping mechanism. ~15% improvement in speed. * Various lexer cleanup. * 2 bug fixes: * 2.0/2.1: Fixed block kw args. * Fixed env for kwargs and friends. === 3.4.1 / 2014-02-14 21 files failed to parse out of ~834k files makes this 99.9975% or 4.21σ. * 1 minor enhancement: * Added StackState#store and #restore. * 1 bug fix: * 1.8/1.9/2.0: Fixed tSTRING_DBEG w/ f'd up amounts of nesting + braces + do/end. yeah. I'm as confused as you are. === 3.4.0 / 2014-02-04 31 files failed to parse out of ~834k files makes this 99.9963% or 4.12σ. * 1 major enhancement: * Replaced hand-written/optimized f'd-up lexer with an oedipus_lex generated lexer. This makes it roughly 40-50% faster. * 30 minor enhancements: * 2.0: Added support for a.b c() do d end.e do |f| g end * 2.0: Added support for a.b c() do d end.e f do |g| h end * Added -s flag to ruby_parse_extract_error to output timings. * Added RubyLexer #command_state and #last_state to deal with oedipus_lex differences. * Added String#lineno and #lineno= because I'm a bad bad person. * Added a bunch of RubyLexer scanning methods: beginning_of_line?, check, scan, etc. * Added a bunch of process_* methods extracted from old yylex. process_amper, etc. * Added lib/.document to save my laptop's battery from pain and suffering * Adjust lineno when we lex a bunch of blank lines. * Attach lineno to tIDENTIFIER values (strings, ugh) * Cleaned up and re-ordered node_assign to be faster (ordered by actual occurrance). * Extend RubyParserStuff#gettable to set the lineno if it comes in with the id. * Extended RubyParserStuff#new_case to take line number. * Finally dropped RPStringScanner's BS #current_line. * Finally dropped RPStringScanner's BS line number calculation (lineno). * Implemented Sexp#add_all since we now have a test case for it. * Removed :call case of node_assign. I don't think it is possible. * Removed RubyLexer #extra_lines_added. No longer used. Complex heredoc lineno's possible screwed up. * Removed RubyLexer#parse_number. Handled by oedipus_lex. * Removed RubyLexer#yacc_value now that next_token returns pairs. * Removed RubyLexer's @src. Now taken care of by oedipus_lex. * Removed RubyParser#advance. RubyParser#next_token takes care of everything now. * Removed RubyParserExtras#arg_add. (presidentbeef! YAY!) * Removed lib/gauntlet_rubyparser.rb. I just don't use it anymore. Too slow. * RubyLexer#is_label_possible? doesn't need an arg * RubyLexer#process_token is now a normal oedipal lexer method. * RubyParser#next_token now expects RubyLexer#next_token to return a pair (type, val). * TRYING a new scheme to figure out encodings... but I'm about to throw in the towel. I hate this stuff so much. * Turned off oedipus_lex's automatic line counting. (pushing to oedipus_lex soon). * Updated to oedipus_lex 2.1+. * 7 bug fixes: * 1.8: Properly parse `a (:b, :c, :d => :e)`. (presidentbeef) * Fixed lexing symbol!= vs symbol!. Please use your spacebar. Think of the children. * Fixed line for dstr spanning multiple lines via backslash. (presidentbeef) * Fixed line numbers for odd cases with trailing whitespace. (presidentbeef) * Fixed line numbers on ambiguous calls w/ gvar/ivar args. (presidentbeef) * Max out unicode hex values to 2-4 or 2-6 chars or pack will overflow and puke. * Removed ESC_RE from RubyLexer. Must have slipped through. === 3.3.0 / 2014-01-14 * Notes: 39 files failed to parse out of ~834k files makes this 99.9953% or 4.07σ. * 15 minor enhancements: * 2.0: Parse kwarg as lvars. (chastell) * Added RubyLexer#beginning_of_line?, check(re), end_of_stream? * Added RubyLexer#process_token_keyword. * Added RubyLexer#scan, #matched, #beginning_of_line? and others to decouple from internals. * Added lexing of \u### and \u{###}." * Added optimizations for simple quoted symbols. * Aliased Lexer#src to ss (since that is what it is). * Allow for 20 in parser class name. * Modified parsers line number calculations for defn nodes. * Removed Env#dynamic, #dynamic?, #use, #used? * Removed RubyLexer#tern. Introduced and disused during 3.0 alpha. (whitequark) * Removed unused RubyLexer#warnings. * Renamed *_RE consts to just * (IDENT_CHAR, ESC, etc). * new_defn now sets arg node line number directly. * zero byte is allowed in symbols for 1.9 / 2.0. * 11 bug fixes: * 2.0: Fixed paren-less kwargs in defn. * Don't bother with regexp encoding options on 1.9+ to avoid warnings. * Fix constant re-build on ruby 2.0 + rake 10. * Fix lexing of %i with extra whitespace. (flori) * Fixed RubyParserStuff#new_body to deal with nonsensical code better (begin-empty+else). (snatchev) * Fixed bug lexing h[k]=begin ... end. Use your space bars people! * Fixed env scoping in new lambdas. * Fixed handling of single array arg in attrasgn. * Fixed test to call RubyLexer#reset between assertions. * No longer assigning ivar/cvars to env. Only locals should be in env. * Refactored initialize and reset to more properly re-initialize as needed. === 3.2.2 / 2013-07-11 * 5 bug fixes: * 1.9/2.0: fixed assocs in return args. (presidentbeef) * Fixed handling of parse error when class is nested in multiple defs. (whitequark) * Fixed lexing of %w[] w/ funny whitespace separators. (whitequark) * Fixed more call nodes that have trailing comma syntax. (presidentbeef) * Fixed more call_args slippage. === 3.2.1 / 2013-07-03 * 1 bug fix: * 1.9/2.0: Trailing assocs were being munged into arrays. (presidentbeef) === 3.2.0 / 2013-07-02 * 1 major enhancement: * Added (rough draft) 2.0 support. Still missing some small / rare things. * 12 minor enhancements: * Added %i(symbol-names...) support. (%I too) * Added 140 more tests, jumping test count from 1376 to 2143. Yay for test reuse! * Added RubyLexer#brace_nest. * Added compare20 rake task to diff the grammar architecture against MRI. * Added lpar_beg and paren_nest to lexer to track state of parens in stabbies * Added shadow nodes for scoped block args. * Compound RubyParser now defaults to 2.0. * Fixed rake to < 10, because 10's file dependency handling is so very broken. * Made it possible to specify version in bin/ruby_parse_extract_error w/ -v 18|19|20 * Refactored to RubyParserStuff::ENCODING_ORDER to allow custom tweaking of encoding guessing. (samlown) * Switched `rake debug` to default to 2.0. * Translated some fixes across 1.8 and 1.9 from 2.0. * 42 bug fixes: * 2.0: Fixed a number of block args scenarios w/ kwargs * 2.0: Fixed args_tail mismatching against lexer. * 2.0: Fixed assocs to return a hash node. * 2.0: Fixed f_block_kw production. * 2.0: Fixed f_block_kwarg production. * 2.0: Fixed handling of stabby proc args in parens. * 2.0: Fixed lexing of kwsplat nodes. * 2.0: Implemented kwsplat nodes. * Added tUBANG to lexer. * Apparently ruby doesn't warn for escaped octal that goes above 7. wtf. * Cleaned up a LOT of arg handling (block and defn, not calls) by using #args. * ESC_RE is set to unicode. This seems problematic. *shrug* * Either found a bug in MRI and/or fixed paren_nest count for []=? methods. * Extended IDENT_CHAR_RE on 1.9+ to top out at \u{10ffff}... because we NEED a million unicode chars. * Fixed % strings with interpolation. * Fixed BEGIN {} to return a sexp. * Fixed a[] += b. (stormbrew) * Fixed arg_blk_pass to allow for sub-args nodes. * Fixed assignable to allow for sexps to be passed to it. * Fixed assoc args in 1.9. * Fixed block_command and block_call (eg a.b c d) to #to_sym their args properly. * Fixed bug in compound RubyParser so it rescues RubyParser::SyntaxError. * Fixed env registration of cdecls. * Fixed lex value for { when expr_endfn. * Fixed lex_state for close paren/brace/bracket. * Fixed lex_state transition for 1.9 if we lexed a defn name. Only 1.8 is odd. * Fixed lexer problem with state mgmt of identifiers that also have registered var name. * Fixed lexing of "1 *\n" to have the correct lex_state. * Fixed lexing of heredocs vs chevron for some lex_states. * Fixed op_asgn nodes to #to_sym their args properly. * Fixed optional value block args. * Fixed parsing of __ENCODING__ on ruby 1.8 (vcall). * Fixed some oddity where 1.9 lexing was blowing up on "0o". Seems invalid now. * Fixed strings with escaped octals > 128. Also... wtf. * Fixed support for empty symbol (wtf?). * Lexer is now declared UTF-8 internally. Hopefully this will fix the encoding mess. * Made UTF_8 the default guess on encodings when it isn't explicit. * Parsing of __ENCODING__ on ruby 1.9+ (in ruby 1.9+) is now colon2 sexp. (whitequark) * Renamed RubyLexer#nest to string_nest * RubyLexer#unescape ignores bad octal/hex and returns unicode strings. * Switched a number of lexical constructs to use IDENT_CHAR_RE instead of \w. I wish there were something cleaner for regexps + unicode. * Switched ruby_parse_extract_error to use binread. === 3.1.3 / 2013-04-09 * 2 bug fixes: * Fixed begin w/ else but no rescue. (whitequark) * Removed literal stripping from block_append. Not its job. === 3.1.2 / 2013-03-18 * 1 minor enhancement: * OMG A SECURITY ISSUE FOR CODE NOBODY USES... EVER === 3.1.1 / 2012-12-19 * 1 minor enhancement: * Added MOVE_TIMEOUT env var for ruby_parse_extract_error to move slow files to a sibling directory * 4 bug fixes: * 1.9: Fixed lexing of "0o". (whitequark) * 1.9: Fixed parsing of unary plus on literals. (whitequark) * Added timeout arg to RubyParser#process to pass through to the real parser * Updated Synopsis to reflect new options for running RP. (louismullie) === 3.1.0 / 2012-12-06 * 2 minor enhancements: * Added RubyParser.for_current_ruby to provide a parser that matches your runtime. (neilconway) * Duck-typed IDENT_CHAR_RE instead of using RUBY_VERSION * 3 bug fixes: * Cleared out body comments in class/module/defn/defs * Flipped lexer tests to US-ASCII to avoid encoding hell * yyerror is now an alias for syntax_error === 3.0.4 / 2012-11-26 * 1 bug fix: * RPStringScanner#lineno was still using byte offset, not char offset. (brynary) === 3.0.3 / 2012-11-23 * 1 minor enhancement: * Improved error output on invalid char in expression. * 1 bug fix: * Fixed lexing of no-name ivars. (whitequark) === 3.0.2 / 2012-11-21 52 down makes 99.9767% or 3.7σ. 130 files failed to parse out of 558k. * 4 minor enhancements: * Added RP_TIMEOUT env var to override default timeout of 10 seconds. * Minor optimization to RubyLexer#parse_number * Only output parseerror output to stderr if $DEBUG. * ruby_parse_extract_error modified to include 'it' blocks in its search. * 7 bug fixes: * 1.9: Fixed args in dot-call forms (eg f.(...)). * 1.9: Fixed lexing stabby lambda w/ do/end * Deal better with DOS files. Ugh. * Fix line number of production after heredoc. * Fixed RubyParser#process to reuse parser instances across calls. * Fixed line numbers for several productions. * new_call sets line number to smallest line number of members. === 3.0.1 / 2012-11-02 * 2 bug fixes -- both based on MRI bugs... Yay?: * 1.9.2 doesn't have String#byteslice... so I have to do the *HORRIBLE*. * Lexing regexps w/ bad character encodings and no declared options will fall back to /.../n. === 3.0.0 / 2012-11-02 I've hit 99.967% success rate against 558k files! 3.6σ!! 182 files failed to parse and spot checking them shows that they're pretty much lost causes. I'm sure I missed some stuff, but it is more important at this point to release a version to get more people using it in more diverse ways than I can come up with. * 3 minor enhancements: * Added RBStringScanner#charpos using #string_to_pos. * Added RBStringScanner#string_to_pos using String#byteslice. * Optimized regexp used for escape chars in strings. (presidentbeef) * 3 bug fixes: * Fixed current_line and unread_many depending on StringScanner#pos * Fixed parsing of 'a[] = b' * Fixed the worst abuse of heredocs EVER. Just because it is valid doesn't mean you should. === 3.0.0.a10 / 2012-10-26 * 1 major enhancement: * iter nodes are now structurally the same as defs. Block args are COMPLETELY different. * 4 minor enhancements: * 1.8 and 1.9 now treat f { |(...)| } differently, per MRI. * 1.9: Added __ENCODING__ support. (witlessbird) * 1.9: Finished coverage for masgn variants in block args * 1.9: covered all forms of block args: optional, splat, block, and destructuring === 3.0.0.a9 / 2012-10-22 Holy crap! I've hit a 99.92% success rate against 558k files! 492 failed parses to go. NOW is the time to start testing ruby_parser against your code! * 16 minor enhancements: * 1.9 parser: Finished magic encoding and utf-8 bom support. * 1.9: Added leading dot support eg "a\n.b". * 1.9: Added partial handling for *arg and opt=val args in block args. * 1.9: OMFG Encoding is the worst thing ever. Overhauled encoding support once again. It is much better at doing last ditch guessing of the encoding of the source file. * 1.9: added String#grep for legacy support. * Added Sexp#block_pass? * Added ability to delete slow files when they timeout. * Added block_dup_check and refactored grammar code to use it for block arg handling. * Added in_lex_state?(*states) to clean up lexer code. * Added tentative support for optional block args. THIS IS SUBJECT TO CHANGE!! * Added toggleable debugging to StackState to make my life easier * All untested uses have not moved but have been laced with poison. * Finally got good tests for most forms of double-block arg errors. * Moved all _known_ uses of SyntaxError to RubyParser::SyntaxError * f_block_optarg now always returns a block node. * ruby_parse_extract_error uses Find.find instead of globbing so dot files aren't missed. * 12 bug fixes: * 1.9: Completely ignore IndexError in unread_many because... you know... it sucks. * 1.9: Fixed lex state after lexing ? in trinary. * 1.9: Fixed lex state in some ternarys. * 1.9: Fixed parsing of "1 ? b('') : 2\na d: 3"... ARE YOU NOT GLAD?!?! * Fix Timeout differences between 1.8 and 1.9 :( * Fixed emacs-style encodings to deal with no whitespace. * Fixed error message for bad % codes. (whitequark) * Fixed lexing of :a==>b vs :a===b vs :a==>b. P.S. Your space bar is broken. chump. * Fixed lexing of rare numeric formats. * Fixed magic comment encodings on DOS files ... :/ * Fixed ruby_parse_extract_error to exit non-zero on errors. * Removed Symbol#is_argument and switch usage to is_arg? === 3.0.0.a8 / 2012-09-26 * 1 bug fix: * Remove method #d from global namespace. (alexch) === 3.0.0.a7 / 2012-09-21 * 3 minor enhancements: * Reorganized ruby_parse_extract_error so it will start much faster with a bunch of glob directories * RubyParserStuff#process takes optional time arg and raises Timeout::Error if it goes too long. You should rescue that, ya know... * ruby_parse_extract_error now checks *.rake and Rakefile on dir scan. * 3 bug fixes: * 1.9: Fixed ternary state tracking so {a:f{f()},b:nil} won't trip up the lexer. * Fixed optional values in block args (no20/no21) * ruby_parse_extract_error skips non-files. Some asshats put .rb on their dirs. :( === 3.0.0.a6 / 2012-08-20 * 2 minor enhancements: * 1.8: Added basic encoding support to 1.8 parser. Assumes -Ku. * 1.9: Added encoding magic comment support to 1.9 parser. * 8 bug fixes: * 1.9: Fixed lexing of -1 w/in conditionals. yeah... I dunno. * 1.9: Fixed parsing of a do | | end. * 1.9: Fixed parsing of not(x). * 1.9: Fixed parsing of op_asgn + rescue: 'a ||= b rescue nil' * 1.9: added \r to the EOL backslash handler. dos files blow * 1.9: hacked in a workaround for 1.9 specific regexps running in 1.8. * Added #reset to RubyParser proxy class * Fixed lexing of conditional w/ %() tokens === 3.0.0.a5 / 2012-07-31 * 5 bug fixes: * 1.9: Fix construction of 'f(:x, y: nil,)' w/ trailing comma. * 1.9: cleaned up lexing exit lex_state handling. Fixes bug parsing 'if f :x; end' * 1.9: fixed building of right-leaning masgns: 'f { |a, (b, c)| }' * 1.9: fixed lexing 'when *splat' * 1.9: fixed lexing of regexps in whens === 3.0.0.a4 / 2012-07-26 * 10 minor enhancements: * 'rake debug' defaults to 1.9 parser since that's all I'm doing these days * 1.9: Fixed f { |(a, b, ...), ...| ... } handling. * Added 'rake extract F=path' task to quickly extract errors from large files * Added on_error handler to provide more readable error message. * Aliased #process to #parse. * Renamed #parse to #process (legacy name), added default path of '(string)' * cleaned ruby_parse_extract_error output and fixed to 1.9 parser * ruby_parse_extract_error expands shell globs from ARGV * ruby_parse_extract_error should also capture RuntimeError * yyerror(msg) now warns with the message instead of ignoring it. * 3 bug fixes: * 1.9: Fixed bug lexing/parsing [ in rhs. * 1.9: Fixed f { |((a, b), c)| ... } handling * 1.9: fixed newline handling during expr_value === 3.0.0.a3 / 2012-07-03 * 1 major enhancement: * OMG! Implemented all the 1.9 arg crap and I went from 500 lines of structural diff to 32! * 17 minor enhancements: * 1.9: !(...) is now a method call. ugh * 1.9: Added __ENCODING__ keyword (returns Unsupported atm). * 1.9: Added support for "a.()" thingy. whatever you call it. Have I ever mentioned that ruby has too much syntax? I mean really... * 1.9: Moved kRETURN/kBREAK/kNEXT from command_call to command * 1.9: Removed when_args and refactored into args production. * 1.9: Support for not/! being a call to #!. why matz? why?!? * 1.9: Support for trailing comma support in opt call args. * 1.9: Switched keyword support to deal with 1.8 vs 1.9 differences. * 1.9: refactored and created command_asgn * 1.9: removed case/else from primary * 1.9: reworked mlhs and family. Now horrible things like 'a, *, c = f' work * 1.9: reworked top level rules from program to expr. Lots of lame refactorings in mri. * Moved 'a[]' from primary down to method_call * Removed 'args trailer' production from assoc_list (eg {1, 2}). * Removed 1.9 support for : as a terminator in do/then * RubyParser no longer subclasses the 18 parser, so I had to change some consts around. * Undeprecated RubyParser - but now it is a compound parser that tries 1.9 first. * 3 bug fixes: * 1.9: fixed bang method name. * Fixed case/when/splat handling on both 1.8 and 1.9. * Removed lambda_body production from lambda === 3.0.0.a2 / 2012-06-19 * 1 minor enhancement: * Updated to sexp_processor ~> 4.0 * 1 bug fix: * Fixed new_module to remove scope/block. Not enough tests on module variance. * 1 known issue: * No parsing of "a.()" thingy. (reported by julian7) (patches welcome!) === 3.0.0.a1 / 2012-05-22 This is the first alpha release of the 3.0.0 series. It is probably woefully incomplete, bug ridden, and hasn't showered in several days. Please please please beat the crap out of it and send bugs/patches/complaints/suggestions. * 5 major enhancements: * 1.9 parsing! Thanks to EVERYONE for submitting patches for this! * Removed :arglist from everything but :op_asgn1 * Removed :block from resbody * Removed :block from when * Removed :block nodes inside of scope nodes (defn/defs/class/sclass). * Removed :scope nodes in defn/defs/class/sclass nodes. * (probably more sexp cleanup to come before 3.0.0 final) * 25 minor enhancements: * 1.9: Fix \!a. (wanabe) * 1.9: Method calling with postargs. (wanabe) * 1.9: Method definition with postargs. (wanabe) * 1.9: Support lambda args without parentheses. (wanabe) * Added R arg to `rake debug` to debug ruby straight up * Added RubyParser, subclassing Ruby18Parser but warning on instantiation. * Added backref_assign_error (needs tests) * Added bin/ruby_parse_extract_error to help with error submissions * Added debug task to help quickly get into a bug * Added more 18 vs 19 lexing tests for ?c. * Added ruby_parser.rb that pulls everything together in proper order. * Added tLABEL. (brynary) * Branched ruby_parser.y to ruby18_parser.y * Fix to pass test_lambda_args_block__19 test. (mrmargolis) * Got rid of one instance of unread_many. (Confusion) * Moved everything from RubyParser to RubyParserStuff and included module in both. * Refactored 1.9 args handling * Refactored and added new_resbody to ruby_parser_extras. * Refactored and added new_when * Refactored tests infrastructure and added both 1.8 and 1.9 test branches. * Removed unused methods: unread, begin_of_line? was_begin_of_line. (YAY!) (Confusion) * Renamed ruby_parser.y to ruby19_parser.y * RubyLexer now takes a version specifier. * Started doing comparative refactoring between MRI's 1.9 parser and RP's. Shouldn't differ functionally except where we missed stuff in RP. * `rake debug` prints the output if it succeeds. * 21 bug fixes: * Added missing gvar arg error. (1.8) * Attach parser files to isolate to ensure they can build * Conditionalize handling of tLABEL to ruby19+. Fixes issue #33. * DOH. I deactivated some tests and never reactivated them. (Confusion ftw) * Duplicate the input so that heredoc processing doesn't morph original. (banister) * Entirely reworked block arg handling. (1.8) * Fix ?x char literal. (nobu) * Fixed 4/5 of literal lambda tests (jamie) * Fixed deps for parser * Fixed lexing of ?c for ruby 1.8 and 1.9. * Fixed more Ruby 1.9 args tests (brynary) * Fixed reswords to match MRI (1.8, 1.9) * Fixed symbols with no spaces in method calls (e.g. foo:bar) (YAY! brynary) * Fixed ternary_nil_no_space and other ternary edge cases for 1.9. (lastobelus) * Fixed test_call_not_equal__19. First bug bounty! (albus522) * Made lambda w/o arg list zero out the arg slot. * Renamed awords to qwords to match stupid MRI naming. (1.8, 1.9) :( * Rolled out brynary's symbols-no-spaces (foo:bar) changes when parsing 1.8 code * Split 1.8 from 1.9 open paren lexer. Gawd that's ugly code. * Split block_var from for_var. (1.8, 1.9) * Use binread (and emulate in ruby 1.8) to avoid encoding issues === 2.3.1 / 2011-09-21 * 2 bug fixes: * Fixed line numbers at end of special var+whitespace (larsch) * Holy crap I was smokin' something good... Fixed 1.9.3 warning === 2.3.0 / 2011-09-06 * 2 minor enhancements: * Add -g flag to parser compile if DEBUG * Lexer now embeds line number in yacc_value for keywords, helping fix up line numbers * 3 bug fixes: * Fix method line numbers when no args and no parens (quix) * Fixed line numbers on return/break/next w/ result expr. (pjnz) * Fixed some lexing state in order to parse: 'f (1), 2' as 'f(1, 2)'. (invernizzi) === 2.2.0 / 2011-08-23 * 2 minor enhancements: * Moved Keyword, Environment, and StackState inside of RubyParser * Added proper dsym and dsym->sym support. * 3 bug fixes: * Added extra (failing) tests for call/iter line number checking (quix) * Fixed line numbers for certain call/iter edge cases * Fixed parsing of: alias :"<<" :">>". === 2.1.0 / 2011-08-15 * 2 minor enhancements: * Added new accessor canonicalize_conditions to toggle conditional canonicalization (on by default). (confused) * Awesome cleanup: Replaced call to append_block by block_append. (Confusion) * 2 bug fixes: * Fixed handling last line of =begin/=end. (raybaxter) * Fixed source line numbers after heredocs. (jbarreneche) === 2.0.6 / 2011-02-18 * 1 minor enhancement: * Switched to hoe's racc plugin to clean up rakefile and builds * 1 bug fix: * Fixed empty =begin/end. === 2.0.5 / 2010-09-01 * 1 minor enhancement: * Started merging like lexical cases to try to squeeze some optimization out === 2.0.4 / 2009-08-18 * 1 minor enhancement: * Changed requires around to be more accurate. * 4 bug fixes: * Fixed .autotest for minitest * Fixed emacs escape lexing bug: "\C-\\" (maglev/gemstone) * Fixed octal lexing edgecases. (maglev/gemstone) * Fixed regexp lexing edgecases. (maglev/gemstone) === 2.0.3 / 2009-06-23 * 4 minor enhancements: * Removed dead code handling d/regex match node cruft. * Switched to minitest * Updated .autotest and rakefile wrt rcov for new hoe capabilities * Updated hoe for new capabilities * 4 bug fixes: * Environment#all now deals with strange edge cases in RAD. * Fixed packaging/compilation issue. * Minor 1.9 fixes * hoe -> flay -> rubyparser rakefile circularity fixed === 2.0.2 / 2009-01-20 * 2 minor enhancements: * Added gauntlet_rubyparser plugin. YAY for easy massive bug-hunting. * Promoted Sexp's file/line/comments to sexp_processor. * 4 bug fixes: * Fixed and improved the readme * Fixed lexing heredoc newlines. * Fixed line numbers on defns. * Fixed rdoc generation bug pointed out by hugh sasse (who rocks) === 2.0.1 / 2008-11-04 * 2 minor enhancements: * Updated for changes to splat node in many contexts. * Made PT a developer dep === 2.0.0 / 2008-10-22 * 1 major enhancement * Brought on the AWESOME! 4x faster! no known lexing/parsing bugs! * 71 minor enhancements * 1.9: Added Fixnum#ord. * 1.9: Added missing Regexp constants and did it so it'd work on 1.9. * Added #store_comment and #comments * Added StringScanner #begin_of_line? * Added a bunch of tests for regexp escape chars, #parse_string, #read_escape, ? numbers, ? whitespace. * Added a hack for rubinius' r2l eval bug. * Added a new token type tSTRING that bypasses tSTRING_BEG/END entirely. Only does non-interpolated strings and then falls back to the old way. MUCH cleaner tho. * Added bin/ruby_parse * Added compare rule to Rakefile. * Added coverage files/dirs to clean rule. * Added file and line numbers to all sexp nodes. Column/ranges to come. * Added lex_state change for lvars at the end of yylex. * Added lexed comments to defn/defs/class/module nodes. * Added stats gathering for yylex. Reordered yylex for avg data * Added tSYMBOL token type and parser rule to speed up symbol lexing. * Added tally output for getch, unread, and unread_many. * Added tests for ambigous uminus/uplus, backtick in cmdarg, square and curly brackets, numeric gvars, eos edge cases, string quoting %<> and %%%. * All cases throughout yylex now return directly if they match, no passthroughs. * All lexer cases now slurp entire token in one swoop. * All zarrays are now just empty arrays. * Changed s(:block_arg, :blah) to :"&blah" in args sexp. * Cleaned up lexer error handling. Now just raises all over. * Cleaned up read_escape and regx_options * Cleaned up tokadd_string (for some definition of cleaned). * Converted single quoted strings to new tSTRING token type. * Coverage is currently 94.4% on lexer. * Done what I can to clean up heredoc lexing... still sucks. * Flattened resbodies in rescue node. Fixed .autotest file. * Folded lex_keywords back in now that it screams. * Found very last instanceof ILiteralNode in the code. haha! * Got the tests subclassing PTTC and cleaned up a lot. YAY * Handle yield(*ary) properly * MASSIVELY cleaned out =begin/=end comment processor. * Massive overhaul on Keyword class. All hail the mighty Hash! * Massively cleaned up ident= edge cases and fixed a stupid bug from jruby. * Merged @/@@ scanner together, going to try to do the same everywhere. * Refactored fix_arg_lex_state, common across the lexer. * Refactored new_fcall into new_call. * Refactored some code to get better profile numbers. * Refactored some more #fix_arg_lex_state. * Refactored tail of yylex into its own method. * Removed Module#kill * Removed Token, replaced with Sexp. * Removed all parse_number and parse_quote tests. * Removed argspush, argscat. YAY! * Removed as many token_buffer.split(//)'s as possible. 1 to go. * Removed begins from compstmts * Removed buffer arg for tokadd_string. * Removed crufty (?) solo '@' token... wtf was that anyhow? * Removed most jruby/stringio cruft from StringScanner. * Removed one unread_many... 2 to go. They're harder. * Removed store_comment, now done directly. * Removed token_buffer. Now I just use token ivar. * Removed use of s() from lexer. Changed the way line numbers are gathered. * Renamed *qwords to *awords. * Renamed StringScanner to RPStringScanner (a subclass) to fix namespace trashing. * Renamed parse to process and aliased to parse. * Renamed token_buffer to string_buffer since that arcane shit still needs it. * Resolved the rest of the lexing issues I brought up w/ ruby-core. * Revamped tokadd_escape. * Rewrote Keyword and KWtable. * Rewrote RubyLexer using StringScanner. * Rewrote tokadd_escape. 79 lines down to 21. * Split out lib/ruby_parser_extras.rb so lexer is standalone. * Started to clean up the parser and make it as skinny as possible * Stripped out as much code as possible. * Stripped yylex of some dead code. * Switched from StringIO to StringScanner. * Updated rakefile for new hoe. * Uses pure ruby racc if ENV['PURE_RUBY'], otherwise use c. * Wrote a ton of lexer tests. Coverage is as close to 100% as possible. * Wrote args to clean up the big nasty args processing grammar section. * lex_strterm is now a plain array, removed RubyLexer#s(...). * yield and super now flatten args. * 21 bug fixes: * I'm sure this list is missing a lot: * Fixed 2 bugs both involving attrasgn (and ilk) esp when lhs is an array. * Fixed a bug in the lexer for strings with single digit hex escapes. * Fixed a bug parsing: a (args) { expr }... the space caused a different route to be followed and all hell broke loose. * Fixed a bug with x\n=beginvar not putting begin back. * Fixed attrasgn to have arglists, not arrays. * Fixed bug in defn/defs with block fixing. * Fixed class/module's name slot if colon2/3. * Fixed dstr with empty interpolation body. * Fixed for 1.9 string/char changes. * Fixed lexer BS wrt determining token type of words. * Fixed lexer BS wrt pass through values and lexing words. SO STUPID. * Fixed lexing of floats. * Fixed lexing of identifiers followed by equals. I hope. * Fixed masgn with splat on lhs * Fixed new_super to deal with block_pass correctly. * Fixed parser's treatment of :colon2 and :colon3. * Fixed regexp scanning of escaped numbers, ANY number is valid, not just octs. * Fixed string scanning of escaped octs, allowing 1-3 chars. * Fixed unescape for \n * Fixed: omg this is stupid. '()' was returning bare nil * Fixed: remove_begin now goes to the end, not sure why it didn't before. === 1.0.0 / 2007-12-20 * 1 major enhancement * Birthday! ruby_parser-3.11.0/metadata.gz.sig0000444000004100000410000000040013277753330017066 0ustar www-datawww-dataI q28)+=_d|uw-ѳRQh!W][o='k*E4K+ ۙ S+{sl F4`gԀ7xTh<;PsSSISrK҈ w4ދ> ަxΆxf47`iHY2M ҽ(I`ubR"ЁȏZ&=,f]4FZȀ/YŅ$gҼe\Nruby_parser-3.11.0/checksums.yaml.gz.sig0000444000004100000410000000040013277753330020234 0ustar www-datawww-dataT&3o85)?Xq 4.9" dependency "rake", "< 11", :developer dependency "oedipus_lex", "~> 2.5", :developer if plugin? :perforce then # generated files V1_2.each do |n| self.perforce_ignore << "lib/ruby#{n}_parser.rb" end V2.each do |n| self.perforce_ignore << "lib/ruby#{n}_parser.y" end self.perforce_ignore << "lib/ruby_lexer.rex.rb" end if plugin?(:racc) self.racc_flags << " -t" if ENV["DEBUG"] self.racc_flags << " --superclass RubyParser::Parser" # self.racc_flags << " --runtime ruby_parser" # TODO: broken in racc end end V2.each do |n| file "lib/ruby#{n}_parser.y" => "lib/ruby_parser.yy" do |t| cmd = 'unifdef -tk -DV=%s -UDEAD %s > %s || true' % [n, t.source, t.name] sh cmd end end V1_2.each do |n| file "lib/ruby#{n}_parser.rb" => "lib/ruby#{n}_parser.y" end file "lib/ruby_lexer.rex.rb" => "lib/ruby_lexer.rex" task :clean do rm_rf(Dir["**/*~"] + Dir["diff.diff"] + # not all diffs. bit me too many times Dir["coverage.info"] + Dir["coverage"] + Dir["lib/ruby2*_parser.y"] + Dir["lib/*.output"]) end task :sort do sh "grepsort '^ +def' lib/ruby_lexer.rb" sh "grepsort '^ +def (test|util)' test/test_ruby_lexer.rb" end desc "what was that command again?" task :huh? do puts "ruby #{Hoe::RUBY_FLAGS} bin/ruby_parse -q -g ..." end task :irb => [:isolate] do sh "GEM_HOME=#{Gem.path.first} irb -rubygems -Ilib -rruby_parser;" end def (task(:phony)).timestamp Time.at 0 end task :isolate => :phony def in_compare Dir.chdir "compare" do yield end end def dl v dir = v[/^\d+\.\d+/] url = "https://cache.ruby-lang.org/pub/ruby/#{dir}/ruby-#{v}.tar.bz2" path = File.basename url unless File.exist? path then system "curl -O #{url}" end end def ruby_parse version v = version[/^\d+\.\d+/].delete "." rp_txt = "rp#{v}.txt" mri_txt = "mri#{v}.txt" parse_y = "parse#{v}.y" tarball = "ruby-#{version}.tar.bz2" ruby_dir = "ruby-#{version}" diff = "diff#{v}.diff" rp_out = "lib/ruby#{v}_parser.output" c_diff = "compare/#{diff}" c_rp_txt = "compare/#{rp_txt}" c_mri_txt = "compare/#{mri_txt}" c_parse_y = "compare/#{parse_y}" c_tarball = "compare/#{tarball}" file tarball do in_compare do dl version end end file c_parse_y => c_tarball do in_compare do system "tar yxf #{tarball} #{ruby_dir}/{id.h,parse.y,tool/{id2token.rb,vpath.rb}}" Dir.chdir ruby_dir do if File.exist? "tool/id2token.rb" then sh "ruby tool/id2token.rb --path-separator=.:./ id.h parse.y > ../#{parse_y}" else cp "parse.y", "../#{parse_y}" end end sh "rm -rf #{ruby_dir}" end end file c_mri_txt => c_parse_y do in_compare do sh "bison -r all #{parse_y}" sh "./normalize.rb parse#{v}.output > #{mri_txt}" rm ["parse#{v}.output", "parse#{v}.tab.c"] end end file rp_out => :parser file c_rp_txt => rp_out do in_compare do sh "./normalize.rb ../#{rp_out} > #{rp_txt}" end end compare = "compare#{v}" desc "Compare all grammars to MRI" task :compare => compare task c_diff => [c_mri_txt, c_rp_txt] do in_compare do system "diff -du #{mri_txt} #{rp_txt} > #{diff}" end end desc "Compare #{v} grammar to MRI #{version}" task compare => c_diff do in_compare do system "wc -l #{diff}" end end task :clean do rm_f Dir[c_parse_y, c_mri_txt, c_rp_txt] end task :realclean do rm_f Dir[tarball] end end ruby_parse "1.8.7-p374" ruby_parse "1.9.3-p551" ruby_parse "2.0.0-p648" ruby_parse "2.1.9" ruby_parse "2.2.6" ruby_parse "2.3.3" # TODO ruby_parse "2.4.0" task :debug => :isolate do ENV["V"] ||= V1_2.last Rake.application[:parser].invoke # this way we can have DEBUG set Rake.application[:lexer].invoke # this way we can have DEBUG set $: << "lib" require "ruby_parser" require "pp" klass = Object.const_get("Ruby#{ENV["V"]}Parser") rescue nil raise "Unsupported version #{ENV["V"]}" unless klass parser = klass.new time = (ENV["RP_TIMEOUT"] || 10).to_i n = ENV["BUG"] file = (n && "bug#{n}.rb") || ENV["F"] || ENV["FILE"] ruby = if file then File.read(file) else file = "env" ENV["R"] || ENV["RUBY"] end begin pp parser.process(ruby, file, time) rescue Racc::ParseError => e p e ss = parser.lexer.ss src = ss.string lines = src[0..ss.pos].split(/\n/) abort "on #{file}:#{lines.size}" end end task :debug_ruby do file = ENV["F"] || ENV["FILE"] sh "/Users/ryan/Desktop/DVDs/debugparser/miniruby -cwy #{file} 2>&1 | ./yuck.rb" end task :extract => :isolate do ENV["V"] ||= V1_2.last Rake.application[:parser].invoke # this way we can have DEBUG set file = ENV["F"] || ENV["FILE"] ruby "-Ilib", "bin/ruby_parse_extract_error", file end task :bugs do sh "for f in bug*.rb ; do #{Gem.ruby} -S rake debug F=$f && rm $f ; done" end # vim: syntax=Ruby ruby_parser-3.11.0/lib/0000755000004100000410000000000013277753330014741 5ustar www-datawww-dataruby_parser-3.11.0/lib/ruby24_parser.y0000644000004100000410000023352013277753330017643 0ustar www-datawww-data# -*- racc -*- class Ruby24Parser token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__ k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG tRATIONAL tIMAGINARY tLABEL_END tLONELY prechigh right tBANG tTILDE tUPLUS right tPOW right tUMINUS_NUM tUMINUS left tSTAR2 tDIVIDE tPERCENT left tPLUS tMINUS left tLSHFT tRSHFT left tAMPER2 left tPIPE tCARET left tGT tGEQ tLT tLEQ nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH left tANDOP left tOROP nonassoc tDOT2 tDOT3 right tEH tCOLON left kRESCUE_MOD right tEQL tOP_ASGN nonassoc kDEFINED right kNOT left kOR kAND nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD nonassoc tLBRACE_ARG nonassoc tLOWEST preclow rule program: { self.lexer.lex_state = :expr_beg } top_compstmt { result = new_compstmt val } top_compstmt: top_stmts opt_terms { result = val[0] } top_stmts: none | top_stmt | top_stmts terms top_stmt { result = self.block_append val[0], val[2] } | error top_stmt top_stmt: stmt { result = val[0] # TODO: remove once I have more confidence this is fixed # result.each_of_type :call_args do |s| # debug20 666, s, result # end } | klBEGIN { if (self.in_def || self.in_single > 0) then debug20 1 yyerror "BEGIN in method" end self.env.extend } tLCURLY top_compstmt tRCURLY { result = new_iter s(:preexe), nil, val[3] } bodystmt: compstmt opt_rescue opt_else opt_ensure { result = new_body val } compstmt: stmts opt_terms { result = new_compstmt val } stmts: none | stmt | stmts terms stmt { result = self.block_append val[0], val[2] } | error stmt { result = val[1] debug20 2, val, result } stmt: kALIAS fitem { lexer.lex_state = :expr_fname result = self.lexer.lineno } fitem { result = s(:alias, val[1], val[3]).line(val[2]) } | kALIAS tGVAR tGVAR { result = s(:valias, val[1].to_sym, val[2].to_sym) } | kALIAS tGVAR tBACK_REF { result = s(:valias, val[1].to_sym, :"$#{val[2]}") } | kALIAS tGVAR tNTH_REF { yyerror "can't make alias for the number variables" } | kUNDEF undef_list { result = val[1] } | stmt kIF_MOD expr_value { result = new_if val[2], val[0], nil } | stmt kUNLESS_MOD expr_value { result = new_if val[2], nil, val[0] } | stmt kWHILE_MOD expr_value { result = new_while val[0], val[2], true } | stmt kUNTIL_MOD expr_value { result = new_until val[0], val[2], true } | stmt kRESCUE_MOD stmt { result = s(:rescue, val[0], new_resbody(s(:array), val[2])) } | klEND tLCURLY compstmt tRCURLY { if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } | var_lhs tOP_ASGN command_call { result = new_op_asgn val } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value call_op tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 4, val, result } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 5, val, result } | backref tOP_ASGN command_call { self.backref_assign_error val[0] } | lhs tEQL mrhs { result = new_assign val[0], s(:svalue, val[2]) } | mlhs tEQL mrhs_arg { result = new_masgn val[0], val[2] } | expr command_asgn: lhs tEQL command_call { result = new_assign val[0], val[2] } | lhs tEQL command_asgn { result = new_assign val[0], val[2] } expr: command_call | expr kAND expr { result = logical_op :and, val[0], val[2] } | expr kOR expr { result = logical_op :or, val[0], val[2] } | kNOT opt_nl expr { result = s(:call, val[2], :"!") } | tBANG command_call { result = s(:call, val[1], :"!") } | arg expr_value: expr { result = value_expr(val[0]) } command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = new_call val[0], val[2].to_sym, val[3] } cmd_brace_block: tLBRACE_ARG { self.env.extend(:dynamic) result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend } fcall: operation { result = new_call nil, val[0].to_sym } command: fcall command_args =tLOWEST { result = val[0].concat val[1].sexp_body # REFACTOR pattern } | fcall command_args cmd_brace_block { result = val[0].concat val[1].sexp_body if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value call_op operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] block_dup_check call, block block.insert 1, call result = block } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block } | kSUPER command_args { result = new_super val[1] } | kYIELD command_args { result = new_yield val[1] } | kRETURN call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { line = val[0].last result = s(:break, ret_args(val[1])).line(line) } | kNEXT call_args { line = val[0].last result = s(:next, ret_args(val[1])).line(line) } mlhs: mlhs_basic | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { result = s(:masgn, s(:array, val[1])) } mlhs_basic: mlhs_head { result = s(:masgn, val[0]) } | mlhs_head mlhs_item { result = s(:masgn, val[0] << val[1].compact) } | mlhs_head tSTAR mlhs_node { result = s(:masgn, val[0] << s(:splat, val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val result = list_append ary1, s(:splat, splat) result.concat ary2.sexp_body result = s(:masgn, result) } | mlhs_head tSTAR { result = s(:masgn, val[0] << s(:splat)) } | mlhs_head tSTAR tCOMMA mlhs_post { ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR mlhs_node { result = s(:masgn, s(:array, s(:splat, val[1]))) } | tSTAR mlhs_node tCOMMA mlhs_post { ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR { result = s(:masgn, s(:array, s(:splat))) } | tSTAR tCOMMA mlhs_post { result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_head: mlhs_item tCOMMA { result = s(:array, val[0]) } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1].compact } mlhs_post: mlhs_item { result = s(:array, val[0]) } | mlhs_post tCOMMA mlhs_item { result = list_append val[0], val[2] } mlhs_node: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER # REFACTOR { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT # REFACTOR? { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } cname: tIDENTIFIER { yyerror "class/module name must be CONSTANT" } | tCONSTANT cpath: tCOLON3 cname { result = s(:colon3, val[1].to_sym) } | cname { result = val[0].to_sym } | primary_value tCOLON2 cname { result = s(:colon2, val[0], val[2].to_sym) } fname: tIDENTIFIER | tCONSTANT | tFID | op { lexer.lex_state = :expr_end result = val[0] } | reswords { lexer.lex_state = :expr_end result = val[0] } fsym: fname | symbol fitem: fsym { result = s(:lit, val[0].to_sym) } | dsym undef_list: fitem { result = new_undef val[0] } | undef_list tCOMMA { lexer.lex_state = :expr_fname } fitem { result = new_undef val[0], val[3] } op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE | kCLASS | kDEF | kDEFINED | kDO | kELSE | kELSIF | kEND | kENSURE | kFALSE | kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT | kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL arg: lhs tEQL arg { result = new_assign val[0], val[2] } | lhs tEQL arg kRESCUE_MOD arg { result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) } | var_lhs tOP_ASGN arg { result = new_op_asgn val } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN arg { result = new_op_asgn2 val } | primary_value call_op tCONSTANT tOP_ASGN arg { result = new_op_asgn2 val } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | tCOLON3 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | backref tOP_ASGN arg { self.backref_assign_error val[0] } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end } | arg tPLUS arg { result = new_call val[0], :+, argl(val[2]) } | arg tMINUS arg { result = new_call val[0], :-, argl(val[2]) } | arg tSTAR2 arg # TODO: rename { result = new_call val[0], :*, argl(val[2]) } | arg tDIVIDE arg { result = new_call val[0], :"/", argl(val[2]) } | arg tPERCENT arg { result = new_call val[0], :"%", argl(val[2]) } | arg tPOW arg { result = new_call val[0], :**, argl(val[2]) } | tUMINUS_NUM simple_numeric tPOW arg { result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") } | tUPLUS arg { result = new_call val[1], :"+@" } | tUMINUS arg { result = new_call val[1], :"-@" } | arg tPIPE arg { result = new_call val[0], :"|", argl(val[2]) } | arg tCARET arg { result = new_call val[0], :"^", argl(val[2]) } | arg tAMPER2 arg { result = new_call val[0], :"&", argl(val[2]) } | arg tCMP arg { result = new_call val[0], :"<=>", argl(val[2]) } | arg tGT arg { result = new_call val[0], :">", argl(val[2]) } | arg tGEQ arg { result = new_call val[0], :">=", argl(val[2]) } | arg tLT arg { result = new_call val[0], :"<", argl(val[2]) } | arg tLEQ arg { result = new_call val[0], :"<=", argl(val[2]) } | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) } | arg tEQQ arg { result = new_call val[0], :"===", argl(val[2]) } | arg tNEQ arg { result = new_call val[0], :"!=", argl(val[2]) } | arg tMATCH arg { result = new_match val[0], val[2] } | arg tNMATCH arg { result = s(:not, new_match(val[0], val[2])) } | tBANG arg { result = new_call val[1], :"!" } | tTILDE arg { result = new_call value_expr(val[1]), :"~" } | arg tLSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) } | arg tRSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) } | arg tANDOP arg { result = logical_op :and, val[0], val[2] } | arg tOROP arg { result = logical_op :or, val[0], val[2] } | kDEFINED opt_nl arg { result = s(:defined, val[2]) } | arg tEH arg opt_nl tCOLON arg { result = s(:if, val[0], val[2], val[5]) } | primary arg_value: arg { result = value_expr(val[0]) } aref_args: none | args trailer { result = args [val[0]] } | args tCOMMA assocs trailer { result = args [val[0], array_to_hash(val[2])] } | assocs trailer { result = args [array_to_hash(val[0])] } paren_args: tLPAREN2 opt_call_args rparen { result = val[1] } opt_paren_args: none | paren_args opt_call_args: none { result = val[0] } | call_args { result = val[0] } | args tCOMMA { result = args val } | args tCOMMA assocs tCOMMA { result = args [val[0], array_to_hash(val[2])] } | assocs tCOMMA { result = args [array_to_hash(val[0])] } call_args: command { warning "parenthesize argument(s) for future version" result = call_args val } | args opt_block_arg { result = call_args val result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { result = call_args [array_to_hash(val[0])] result = self.arg_blk_pass result, val[1] } | args tCOMMA assocs opt_block_arg { result = call_args [val[0], array_to_hash(val[2])] result = self.arg_blk_pass result, val[3] } | block_arg { result = call_args val } command_args: { result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true } call_args { lexer.cmdarg.stack.replace val[0] result = val[1] } block_arg: tAMPER arg_value { result = s(:block_pass, val[1]) } opt_block_arg: tCOMMA block_arg { result = val[1] } | none args: arg_value { result = s(:array, val[0]) } | tSTAR arg_value { result = s(:array, s(:splat, val[1])) } | args tCOMMA arg_value { result = self.list_append val[0], val[2] } | args tCOMMA tSTAR arg_value { result = self.list_append val[0], s(:splat, val[3]) } mrhs_arg: mrhs { result = new_masgn_arg val[0] } | arg_value { result = new_masgn_arg val[0], :wrap } mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = self.arg_concat val[0], val[3] } | tSTAR arg_value { result = s(:splat, val[1]) } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = new_call nil, val[0].to_sym } | kBEGIN { result = self.lexer.lineno } bodystmt kEND { unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] } | tLPAREN_ARG rparen { debug20 13, val, result } | tLPAREN_ARG { result = self.lexer.cmdarg.stack.dup lexer.cmdarg.stack.replace [false] # TODO add api for these } expr { lexer.lex_state = :expr_endarg } rparen { warning "(...) interpreted as grouped expression" lexer.cmdarg.stack.replace val[1] result = val[2] } | tLPAREN compstmt tRPAREN { result = val[1] || s(:nil) result.paren = true } | primary_value tCOLON2 tCONSTANT { result = s(:colon2, val[0], val[2].to_sym) } | tCOLON3 tCONSTANT { result = s(:colon3, val[1].to_sym) } | tLBRACK aref_args tRBRACK { result = val[1] || s(:array) result.sexp_type = :array # aref_args is :args } | tLBRACE { result = self.lexer.lineno } assoc_list tRCURLY { result = new_hash val } | kRETURN { result = s(:return) } | kYIELD tLPAREN2 call_args rparen { result = new_yield val[2] } | kYIELD tLPAREN2 rparen { result = new_yield } | kYIELD { result = new_yield } | kDEFINED opt_nl tLPAREN2 expr rparen { result = s(:defined, val[3]) } | kNOT tLPAREN2 expr rparen { result = s(:call, val[2], :"!") } | kNOT tLPAREN2 rparen { debug20 14, val, result } | fcall brace_block { oper, iter = val[0], val[1] call = oper # FIX iter.insert 1, call result = iter call.line = iter.line } | method_call | method_call brace_block { call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter } | tLAMBDA lambda { result = val[1] # TODO: fix lineno } | kIF expr_value then compstmt if_tail kEND { result = new_if val[1], val[3], val[4] } | kUNLESS expr_value then compstmt opt_else kEND { result = new_if val[1], val[4], val[3] } | kWHILE { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_while val[5], val[2], true } | kUNTIL { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_until val[5], val[2], true } | kCASE expr_value opt_terms case_body kEND { (_, line), expr, _, body, _ = val result = new_case expr, body, line } | kCASE opt_terms case_body kEND { (_, line), _, body, _ = val result = new_case nil, body, line } | kFOR for_var kIN { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_for val[4], val[1], val[7] } | kCLASS { result = self.lexer.lineno } cpath superclass { self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend } bodystmt kEND { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kCLASS tLSHFT { result = self.lexer.lineno } expr { result = self.in_def self.in_def = false } term { result = self.in_single self.in_single = 0 self.env.extend } bodystmt kEND { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kMODULE { result = self.lexer.lineno } cpath { self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend } bodystmt kEND { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kDEF fname { result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend # TODO: local->cmdargs = cmdarg_stack; # TODO: port local_push_gen and local_pop_gen lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body } | kDEF singleton dot_or_colon { self.comments.push self.lexer.comments lexer.lex_state = :expr_fname } fname { self.in_single += 1 self.env.extend lexer.lex_state = :expr_endfn # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body } | kBREAK { result = s(:break) } | kNEXT { result = s(:next) } | kREDO { result = s(:redo) } | kRETRY { result = s(:retry) } primary_value: primary { result = value_expr(val[0]) } # These are really stupid k_begin: kBEGIN k_if: kIF k_unless: kUNLESS k_while: kWHILE k_until: kUNTIL k_case: kCASE k_for: kFOR k_class: kCLASS k_module: kMODULE k_def: kDEF k_end: kEND then: term | kTHEN | term kTHEN do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { result = s(:if, val[1], val[3], val[4]) } opt_else: none | kELSE compstmt { result = val[1] } for_var: lhs | mlhs { val[0].delete_at 1 if val[0][1].nil? # HACK } f_marg: f_norm_arg | tLPAREN f_margs rparen { result = val[1] } f_marg_list: f_marg { result = s(:array, val[0]) } | f_marg_list tCOMMA f_marg { result = list_append val[0], val[2] } f_margs: f_marg_list { args, = val result = block_var args } | f_marg_list tCOMMA tSTAR f_norm_arg { args, _, _, splat = val result = block_var args, "*#{splat}".to_sym } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 } | f_marg_list tCOMMA tSTAR { args, _, _ = val result = block_var args, :* } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { args, _, _, _, args2 = val result = block_var args, :*, args2 } | tSTAR f_norm_arg { _, splat = val result = block_var :"*#{splat}" } | tSTAR f_norm_arg tCOMMA f_marg_list { _, splat, _, args = val result = block_var :"*#{splat}", args } | tSTAR { result = block_var :* } | tSTAR tCOMMA f_marg_list { _, _, args = val result = block_var :*, args } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = call_args val } | f_block_kwarg opt_f_block_arg { result = call_args val } | f_kwrest opt_f_block_arg { result = call_args val } | f_block_arg { result = call_args val } opt_block_args_tail: tCOMMA block_args_tail { result = args val } | none block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_block_optarg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_rest_arg opt_block_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | block_args_tail { result = args val } opt_block_param: none { result = 0 } | block_param_def block_param_def: tPIPE opt_bv_decl tPIPE { result = args val } | tOROP { self.lexer.command_start = true result = s(:args) } | tPIPE block_param opt_bv_decl tPIPE { result = args val } opt_bv_decl: opt_nl | opt_nl tSEMI bv_decls opt_nl { result = args val } bv_decls: bvar { result = args val } | bv_decls tCOMMA bvar { result = args val } bvar: tIDENTIFIER { result = s(:shadow, val[0].to_sym) } | f_bad_arg lambda: { self.env.extend :dynamic result = self.lexer.lineno result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } f_larglist lambda_body { lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body self.env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl rparen { result = args val } | f_args { result = val[0] result = 0 if result == s(:args) } lambda_body: tLAMBEG compstmt tRCURLY { result = val[1] } | kDO_LAMBDA compstmt kEND { result = val[1] } do_block: kDO_BLOCK { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend } block_call: command do_block { # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] } | block_call dot_or_colon operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } | block_call dot_or_colon operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } | block_call dot_or_colon operation2 command_args do_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } method_call: fcall { result = self.lexer.lineno } paren_args { args = self.call_args val[2..-1] result = val[0].concat args.sexp_body } | primary_value call_op operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value tCOLON2 operation2 paren_args { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation3 { result = new_call val[0], val[2].to_sym } | primary_value call_op paren_args { result = new_call val[0], :call, val[2], val[1] } | primary_value tCOLON2 paren_args { result = new_call val[0], :call, val[2] } | kSUPER paren_args { result = new_super val[1] } | kSUPER { result = s(:zsuper) } | primary_value tLBRACK2 opt_call_args rbracket { result = new_aref val } brace_block: tLCURLY { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } | kDO { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } case_body: kWHEN { result = self.lexer.lineno } args then compstmt cases { result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] } cases: opt_else | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above } | { result = nil } exc_list: arg_value { result = s(:array, val[0]) } | mrhs | none exc_var: tASSOC lhs { result = val[1] } | none opt_ensure: kENSURE compstmt { _, body = val result = body || s(:nil) } | none literal: numeric { result = s(:lit, val[0]) } | symbol { result = s(:lit, val[0]) } | dsym strings: string { val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] } string: tCHAR { debug20 23, val, result } | string1 | string string1 { result = self.literal_concat val[0], val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = val[1] } | tSTRING { result = new_string val } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = new_xstring val[1] } regexp: tREGEXP_BEG regexp_contents tREGEXP_END { result = new_regexp val } words: tWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tWORDS_BEG word_list tSTRING_END { result = val[1] } word_list: none { result = new_word_list } | word_list word tSPACE { result = val[0].dup << new_word_list_entry(val) } word: string_content | word string_content { result = self.literal_concat val[0], val[1] } symbols: tSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tSYMBOLS_BEG symbol_list tSTRING_END { result = val[1] } symbol_list: none { result = new_symbol_list } | symbol_list word tSPACE { result = val[0].dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tQWORDS_BEG qword_list tSTRING_END { result = val[1] } qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tQSYMBOLS_BEG qsym_list tSTRING_END { result = val[1] } qword_list: none { result = new_qword_list } | qword_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qword_list_entry(val) } qsym_list: none { result = new_qsym_list } | qsym_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qsym_list_entry(val) } string_contents: none { result = s(:str, "") } | string_contents string_content { result = literal_concat(val[0], val[1]) } xstring_contents: none { result = nil } | xstring_contents string_content { result = literal_concat(val[0], val[1]) } regexp_contents: none { result = nil } | regexp_contents string_content { result = literal_concat(val[0], val[1]) } string_content: tSTRING_CONTENT { result = new_string val } | tSTRING_DVAR { result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg # TODO: expr_value ? } string_dvar { lexer.lex_strterm = val[1] result = s(:evstr, val[2]) } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store, lexer.lex_state, ] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_value } compstmt tRCURLY { # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg lexer.lex_state = oldlex_state case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else debug20 25 raise "unknown string body: #{stmt.inspect}" end } string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } | tIVAR { result = s(:ivar, val[0].to_sym) } | tCVAR { result = s(:cvar, val[0].to_sym) } | backref symbol: tSYMBEG sym { lexer.lex_state = :expr_end result = val[1].to_sym } | tSYMBOL { result = val[0].to_sym } sym: fname | tIVAR | tGVAR | tCVAR dsym: tSYMBEG xstring_contents tSTRING_END { lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) when :evstr then result = s(:dsym, "", result) else debug20 26, val, result end } numeric: simple_numeric | tUMINUS_NUM simple_numeric { result = -val[1] # TODO: pt_testcase } simple_numeric: tINTEGER | tFLOAT | tRATIONAL | tIMAGINARY user_variable: tIDENTIFIER | tIVAR | tGVAR | tCONSTANT | tCVAR keyword_variable: kNIL { result = s(:nil) } | kSELF { result = s(:self) } | kTRUE { result = s(:true) } | kFALSE { result = s(:false) } | k__FILE__ { result = s(:str, self.file) } | k__LINE__ { result = s(:lit, lexer.lineno) } | k__ENCODING__ { result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end } var_ref: user_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } | keyword_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } var_lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 29, val, result } backref: tNTH_REF { result = s(:nth_ref, val[0]) } | tBACK_REF { result = s(:back_ref, val[0]) } superclass: term { result = nil } | tLT { lexer.lex_state = :expr_beg } expr_value term { result = val[2] } | error term { yyerrok result = nil debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] self.lexer.lex_state = :expr_beg self.lexer.command_start = true # TODO: # $$ = parser->parser_in_kwarg; # parser->parser_in_kwarg = 1; } | f_args term { # TODO: parser->parser_in_kwarg = $1; result = val[0] self.lexer.lex_state = :expr_beg self.lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = args val } | f_kwarg opt_f_block_arg { result = args val } | f_kwrest opt_f_block_arg { result = args val } | f_block_arg opt_args_tail: tCOMMA args_tail { result = val[1] } | { result = nil } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_optarg opt_args_tail { result = args val } | f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_rest_arg opt_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | args_tail { result = args val } | { result = args val } f_bad_arg: tCONSTANT { yyerror "formal argument cannot be a constant" } | tIVAR { yyerror "formal argument cannot be an instance variable" } | tGVAR { yyerror "formal argument cannot be a global variable" } | tCVAR { yyerror "formal argument cannot be a class variable" } f_norm_arg: f_bad_arg | tIDENTIFIER { identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier } f_arg_asgn: f_norm_arg f_arg_item: f_arg_asgn | tLPAREN f_margs rparen { result = val[1] } f_arg: f_arg_item { case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end } | f_arg tCOMMA f_arg_item { list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item } f_label: tLABEL f_kw: f_label arg_value { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } | f_label { label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) } f_block_kw: f_label primary_value { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } | f_label { label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) } f_block_kwarg: f_block_kw | f_block_kwarg tCOMMA f_block_kw { list, _, item = val result = list << item.last } f_kwarg: f_kw | f_kwarg tCOMMA f_kw { result = args val } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { result = :"**#{val[1]}" } | kwrest_mark { result = :"**" } f_opt: f_arg_asgn tEQL arg_value { result = self.assignable val[0], val[2] # TODO: detect duplicate names } f_block_opt: f_arg_asgn tEQL primary_value { result = self.assignable val[0], val[2] } f_block_optarg: f_block_opt { result = s(:block, val[0]) } | f_block_optarg tCOMMA f_block_opt { result = val[0] result << val[2] } f_optarg: f_opt { result = s(:block, val[0]) } | f_optarg tCOMMA f_opt { result = self.block_append val[0], val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" } | restarg_mark { name = :"*" self.env[name] = :lvar result = name } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym } opt_f_block_arg: tCOMMA f_block_arg { result = val[1] } | { result = nil } singleton: var_ref | tLPAREN2 { lexer.lex_state = :expr_beg } expr rparen { result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit } assoc_list: none # [!nil] { result = s(:array) } | assocs trailer # [!nil] { result = val[0] } assocs: assoc | assocs tCOMMA assoc { list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash } assoc: arg_value tASSOC arg_value { result = s(:array, val[0], val[2]) } | tLABEL opt_nl arg_value { result = s(:array, s(:lit, val[0][0].to_sym), val.last) } | tSTRING_BEG string_contents tLABEL_END arg_value { _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value) } | tSYMBOL arg_value { raise "not yet: #{val.inspect}" # result = s(:array, s(:lit, val[1].to_sym), val[1]) } | tDSTAR arg_value { result = s(:array, s(:kwsplat, val[1])) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 call_op: tDOT | tLONELY opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN rbracket: opt_nl tRBRACK trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI { yyerrok } none: { result = nil; } end ---- inner require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ruby_parser-3.11.0/lib/ruby_lexer.rex.rb0000644000004100000410000003061313277753330020246 0ustar www-datawww-data# encoding: UTF-8 #-- # This file is automatically generated. Do not modify it. # Generated by: oedipus_lex version 2.5.0. # Source: lib/ruby_lexer.rex #++ # # lexical scanner definition for ruby class RubyLexer require 'strscan' IDENT = /^#{IDENT_CHAR}+/o ESC = /\\((?>[0-7]{1,3}|x[0-9a-fA-F]{1,2}|M-[^\\]|(C-|c)[^\\]|u[0-9a-fA-F]+|u\{[0-9a-fA-F]+\}|[^0-7xMCc]))/ SIMPLE_STRING = /(#{ESC}|\#(#{ESC}|[^\{\#\@\$\"\\])|[^\"\\\#])*/o SSTRING = /(\\.|[^\'])*/ INT_DEC = /[+]?(?:(?:[1-9][\d_]*|0)(?!\.\d)(ri|r|i)?\b|0d[0-9_]+)(ri|r|i)?/i INT_HEX = /[+]?0x[a-f0-9_]+(ri|r|i)?/i INT_BIN = /[+]?0b[01_]+(ri|r|i)?/i INT_OCT = /[+]?0o?[0-7_]+(ri|r|i)?|0o(ri|r|i)?/i FLOAT = /[+]?\d[\d_]*\.[\d_]+(e[+-]?[\d_]+)?(?:(ri|r|i)\b)?|[+]?[\d_]+e[+-]?[\d_]+(?:(ri|r|i)\b)?/i INT_DEC2 = /[+]?\d[0-9_]*(?![e])((ri|r|i)\b)?/i NUM_BAD = /[+]?0[xbd]\b/i INT_OCT_BAD = /[+]?0o?[0-7_]*[89]/i FLOAT_BAD = /[+]?\d[\d_]*_(e|\.)/i class LexerError < StandardError ; end class ScanError < LexerError ; end attr_accessor :filename attr_accessor :ss attr_accessor :state alias :match :ss def matches m = (1..9).map { |i| ss[i] } m.pop until m[-1] or m.empty? m end def action yield end def scanner_class StringScanner end unless instance_methods(false).map(&:to_s).include?("scanner_class") def parse str self.ss = scanner_class.new str self.state ||= nil do_parse end def parse_file path self.filename = path open path do |f| parse f.read end end def location [ (filename || ""), ].compact.join(":") end def next_token return process_string if lex_strterm self.command_state = self.command_start self.command_start = false self.space_seen = false self.last_state = lex_state token = nil until ss.eos? or token do token = case state when nil then case when ss.skip(/[\ \t\r\f\v]/) then action { self.space_seen = true; next } when text = ss.scan(/\n|\#/) then process_newline_or_comment text when text = ss.scan(/[\]\)\}]/) then process_bracing text when ss.match?(/\!/) then case when in_arg_state? && (ss.skip(/\!\@/)) then action { result :expr_arg, :tUBANG, "!@" } when text = ss.scan(/\![=~]?/) then action { result :arg_state, TOKENS[text], text } end # group /\!/ when ss.match?(/\./) then case when text = ss.scan(/\.\.\.?/) then action { result :expr_beg, TOKENS[text], text } when ss.skip(/\.\d/) then action { rb_compile_error "no . floating literal anymore put 0 before dot" } when ss.skip(/\./) then action { result :expr_dot, :tDOT, "." } end # group /\./ when text = ss.scan(/\(/) then process_paren text when text = ss.scan(/\,/) then action { result :expr_beg, TOKENS[text], text } when ss.match?(/=/) then case when text = ss.scan(/\=\=\=|\=\=|\=~|\=>|\=(?!begin\b)/) then action { result arg_state, TOKENS[text], text } when bol? && (text = ss.scan(/\=begin(?=\s)/)) then process_begin text when text = ss.scan(/\=(?=begin\b)/) then action { result arg_state, TOKENS[text], text } end # group /=/ when ruby22_label? && (text = ss.scan(/\"#{SIMPLE_STRING}\":/o)) then process_label text when text = ss.scan(/\"(#{SIMPLE_STRING})\"/o) then action { result :expr_end, :tSTRING, text[1..-2].gsub(ESC) { unescape $1 } } when text = ss.scan(/\"/) then action { string STR_DQUOTE; result nil, :tSTRING_BEG, text } when text = ss.scan(/\@\@?\d/) then action { rb_compile_error "`#{text}` is not allowed as a variable name" } when text = ss.scan(/\@\@?#{IDENT_CHAR}+/o) then process_ivar text when ss.match?(/:/) then case when not_end? && (text = ss.scan(/:([a-zA-Z_]#{IDENT_CHAR}*(?:[?]|[!](?!=)|=(?==>)|=(?![=>]))?)/o)) then process_symbol text when not_end? && (text = ss.scan(/\:\"(#{SIMPLE_STRING})\"/o)) then process_symbol text when not_end? && (text = ss.scan(/\:\'(#{SSTRING})\'/o)) then process_symbol text when text = ss.scan(/\:\:/) then process_colon2 text when text = ss.scan(/\:/) then process_colon1 text end # group /:/ when ss.skip(/->/) then action { result :expr_endfn, :tLAMBDA, nil } when text = ss.scan(/[+-]/) then process_plus_minus text when ss.match?(/[+\d]/) then case when ss.skip(/#{NUM_BAD}/o) then action { rb_compile_error "Invalid numeric format" } when ss.skip(/#{INT_DEC}/o) then action { int_with_base 10 } when ss.skip(/#{INT_HEX}/o) then action { int_with_base 16 } when ss.skip(/#{INT_BIN}/o) then action { int_with_base 2 } when ss.skip(/#{INT_OCT_BAD}/o) then action { rb_compile_error "Illegal octal digit." } when ss.skip(/#{INT_OCT}/o) then action { int_with_base 8 } when ss.skip(/#{FLOAT_BAD}/o) then action { rb_compile_error "Trailing '_' in number." } when text = ss.scan(/#{FLOAT}/o) then process_float text when ss.skip(/#{INT_DEC2}/o) then action { int_with_base 10 } when ss.skip(/[0-9]/) then action { rb_compile_error "Bad number format" } end # group /[+\d]/ when text = ss.scan(/\[/) then process_square_bracket text when was_label? && (text = ss.scan(/\'#{SSTRING}\':?/o)) then process_label_or_string text when ss.match?(/\|/) then case when ss.skip(/\|\|\=/) then action { result :expr_beg, :tOP_ASGN, "||" } when ss.skip(/\|\|/) then action { result :expr_beg, :tOROP, "||" } when ss.skip(/\|\=/) then action { result :expr_beg, :tOP_ASGN, "|" } when ss.skip(/\|/) then action { result :arg_state, :tPIPE, "|" } end # group /\|/ when text = ss.scan(/\{/) then process_curly_brace text when ss.match?(/\*/) then case when ss.skip(/\*\*=/) then action { result :expr_beg, :tOP_ASGN, "**" } when ss.skip(/\*\*/) then action { result(:arg_state, space_vs_beginning(:tDSTAR, :tDSTAR, :tPOW), "**") } when ss.skip(/\*\=/) then action { result(:expr_beg, :tOP_ASGN, "*") } when ss.skip(/\*/) then action { result(:arg_state, space_vs_beginning(:tSTAR, :tSTAR, :tSTAR2), "*") } end # group /\*/ when ss.match?(//) then action { result :arg_state, :tCMP, "<=>" } when ss.skip(/\<\=/) then action { result :arg_state, :tLEQ, "<=" } when ss.skip(/\<\<\=/) then action { result :arg_state, :tOP_ASGN, "<<" } when text = ss.scan(/\<\/) then case when ss.skip(/\>\=/) then action { result :arg_state, :tGEQ, ">=" } when ss.skip(/\>\>=/) then action { result :arg_state, :tOP_ASGN, ">>" } when ss.skip(/\>\>/) then action { result :arg_state, :tRSHFT, ">>" } when ss.skip(/\>/) then action { result :arg_state, :tGT, ">" } end # group />/ when ss.match?(/\`/) then case when expr_fname? && (ss.skip(/\`/)) then action { result(:expr_end, :tBACK_REF2, "`") } when expr_dot? && (ss.skip(/\`/)) then action { result((command_state ? :expr_cmdarg : :expr_arg), :tBACK_REF2, "`") } when ss.skip(/\`/) then action { string STR_XQUOTE, '`'; result(nil, :tXSTRING_BEG, "`") } end # group /\`/ when text = ss.scan(/\?/) then process_questionmark text when ss.match?(/&/) then case when ss.skip(/\&\&\=/) then action { result(:expr_beg, :tOP_ASGN, "&&") } when ss.skip(/\&\&/) then action { result(:expr_beg, :tANDOP, "&&") } when ss.skip(/\&\=/) then action { result(:expr_beg, :tOP_ASGN, "&" ) } when ss.skip(/\&\./) then action { result(:expr_dot, :tLONELY, "&.") } when text = ss.scan(/\&/) then process_amper text end # group /&/ when text = ss.scan(/\//) then process_slash text when ss.match?(/\^/) then case when ss.skip(/\^=/) then action { result(:expr_beg, :tOP_ASGN, "^") } when ss.skip(/\^/) then action { result(:arg_state, :tCARET, "^") } end # group /\^/ when ss.skip(/\;/) then action { self.command_start = true; result(:expr_beg, :tSEMI, ";") } when ss.match?(/~/) then case when in_arg_state? && (ss.skip(/\~@/)) then action { result(:arg_state, :tTILDE, "~") } when ss.skip(/\~/) then action { result(:arg_state, :tTILDE, "~") } end # group /~/ when ss.match?(/\\/) then case when ss.skip(/\\\r?\n/) then action { self.lineno += 1; self.space_seen = true; next } when ss.skip(/\\/) then action { rb_compile_error "bare backslash only allowed before newline" } end # group /\\/ when text = ss.scan(/\%/) then process_percent text when ss.match?(/\$/) then case when text = ss.scan(/\$_\w+/) then process_gvar text when text = ss.scan(/\$_/) then process_gvar text when text = ss.scan(/\$[~*$?!@\/\\;,.=:<>\"]|\$-\w?/) then process_gvar text when in_fname? && (text = ss.scan(/\$([\&\`\'\+])/)) then process_gvar text when text = ss.scan(/\$([\&\`\'\+])/) then process_backref text when in_fname? && (text = ss.scan(/\$([1-9]\d*)/)) then process_gvar text when text = ss.scan(/\$([1-9]\d*)/) then process_nthref text when text = ss.scan(/\$0/) then process_gvar text when text = ss.scan(/\$\W|\$\z/) then process_gvar_oddity text when text = ss.scan(/\$\w+/) then process_gvar text end # group /\$/ when text = ss.scan(/\_/) then process_underscore text when text = ss.scan(/#{IDENT}/o) then process_token text when ss.skip(/\004|\032|\000|\Z/) then action { [RubyLexer::EOF, RubyLexer::EOF] } when text = ss.scan(/./) then action { rb_compile_error "Invalid char #{text.inspect} in expression" } else text = ss.string[ss.pos .. -1] raise ScanError, "can not match (#{state.inspect}) at #{location}: '#{text}'" end else raise ScanError, "undefined state at #{location}: '#{state}'" end # token = case state next unless token # allow functions to trigger redo w/ nil end # while raise LexerError, "bad lexical result at #{location}: #{token.inspect}" unless token.nil? || (Array === token && token.size >= 2) # auto-switch state self.state = token.last if token && token.first == :state token end # def next_token end # class ruby_parser-3.11.0/lib/ruby18_parser.y0000444000004100000410000020014213277753330017636 0ustar www-datawww-data# -*- racc -*- class Ruby18Parser token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kRETURN kYIELD kSUPER kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__ k__FILE__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAST_TOKEN prechigh right tBANG tTILDE tUPLUS right tPOW right tUMINUS_NUM tUMINUS left tSTAR2 tDIVIDE tPERCENT left tPLUS tMINUS left tLSHFT tRSHFT left tAMPER2 left tPIPE tCARET left tGT tGEQ tLT tLEQ nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH left tANDOP left tOROP nonassoc tDOT2 tDOT3 right tEH tCOLON left kRESCUE_MOD right tEQL tOP_ASGN nonassoc kDEFINED right kNOT left kOR kAND nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD nonassoc tLBRACE_ARG nonassoc tLOWEST preclow rule program: { self.lexer.lex_state = :expr_beg } compstmt { result = val[1] } bodystmt: compstmt opt_rescue opt_else opt_ensure { result = new_body val } compstmt: stmts opt_terms { result = new_compstmt val } stmts: none | stmt | stmts terms stmt { result = block_append val[0], val[2] } | error stmt { result = val[1] } stmt: kALIAS fitem { lexer.lex_state = :expr_fname result = self.lexer.lineno } fitem { result = s(:alias, val[1], val[3]).line(val[2]) } | kALIAS tGVAR tGVAR { result = s(:valias, val[1].to_sym, val[2].to_sym) } | kALIAS tGVAR tBACK_REF { result = s(:valias, val[1].to_sym, :"$#{val[2]}") } | kALIAS tGVAR tNTH_REF { yyerror "can't make alias for the number variables" } | kUNDEF undef_list { result = val[1] } | stmt kIF_MOD expr_value { result = new_if val[2], val[0], nil } | stmt kUNLESS_MOD expr_value { result = new_if val[2], nil, val[0] } | stmt kWHILE_MOD expr_value { result = new_while val[0], val[2], true } | stmt kUNTIL_MOD expr_value { result = new_until val[0], val[2], true } | stmt kRESCUE_MOD stmt { result = s(:rescue, val[0], new_resbody(s(:array), val[2])) } | klBEGIN { if (in_def || in_single > 0) then yyerror "BEGIN in method" end self.env.extend } tLCURLY compstmt tRCURLY { result = new_iter s(:preexe), nil, val[3] } | klEND tLCURLY compstmt tRCURLY { if (in_def || in_single > 0) then yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] } | lhs tEQL command_call { result = new_assign val[0], val[2] } | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } | var_lhs tOP_ASGN command_call { result = new_op_asgn val } | primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN command_call { result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) } | primary_value tDOT tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) } | backref tOP_ASGN command_call { backref_assign_error val[0] } | lhs tEQL mrhs { result = new_assign val[0], s(:svalue, val[2]) } | mlhs tEQL arg_value { result = new_masgn val[0], val[2], :wrap } | mlhs tEQL mrhs { result = new_masgn val[0], val[2] } | expr expr: command_call | expr kAND expr { result = logical_op :and, val[0], val[2] } | expr kOR expr { result = logical_op :or, val[0], val[2] } | kNOT expr { result = s(:not, val[1]) } | tBANG command_call { result = s(:not, val[1]) } | arg expr_value: expr { result = value_expr(val[0]) } command_call: command | block_command | kRETURN call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { line = val[0].last result = s(:break, ret_args(val[1])).line(line) } | kNEXT call_args { line = val[0].last result = s(:next, ret_args(val[1])).line(line) } block_command: block_call | block_call tDOT operation2 command_args { result = new_call val[0], val[2], val[3] } | block_call tCOLON2 operation2 command_args { result = new_call val[0], val[2], val[3] } cmd_brace_block: tLBRACE_ARG { self.env.extend(:dynamic) result = self.lexer.lineno } opt_block_var { result = nil # self.env.dynamic.keys } compstmt tRCURLY { result = new_iter nil, val[2], val[4] self.env.unextend } command: operation command_args =tLOWEST { result = new_call nil, val[0].to_sym, val[1] } | operation command_args cmd_brace_block { result = new_call nil, val[0].to_sym, val[1] if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end } | primary_value tDOT operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tDOT operation2 command_args cmd_brace_block { result = new_call val[0], val[2].to_sym, val[3] raise "no2" if val[4] then block_dup_check result, val[4] val[2] << result result = val[2] end } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation2 command_args cmd_brace_block { result = new_call val[0], val[2].to_sym, val[3] raise "no3" if val[4] then block_dup_check result, val[4] val[2] << result result = val[2] end } | kSUPER command_args { result = new_super val[1] } | kYIELD command_args { result = new_yield val[1] } mlhs: mlhs_basic | tLPAREN mlhs_entry tRPAREN { result = val[1] } mlhs_entry: mlhs_basic | tLPAREN mlhs_entry tRPAREN { result = s(:masgn, s(:array, val[1])) } mlhs_basic: mlhs_head { result = s(:masgn, val[0]) } | mlhs_head mlhs_item { result = s(:masgn, val[0] << val[1].compact) } | mlhs_head tSTAR mlhs_node { result = s(:masgn, val[0] << s(:splat, val[2])) } | mlhs_head tSTAR { result = s(:masgn, val[0] << s(:splat)) } | tSTAR mlhs_node { result = s(:masgn, s(:array, s(:splat, val[1]))) } | tSTAR { result = s(:masgn, s(:array, s(:splat))) } mlhs_item: mlhs_node | tLPAREN mlhs_entry tRPAREN { result = val[1] } mlhs_head: mlhs_item tCOMMA { result = s(:array, val[0]) } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1].compact } mlhs_node: variable { result = assignable val[0] } | primary_value tLBRACK2 aref_args tRBRACK { result = aryset val[0], val[2] } | primary_value tDOT tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value tDOT tCONSTANT { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value tCOLON2 tCONSTANT { if (in_def || in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) } | tCOLON3 tCONSTANT { if (in_def || in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) } | backref { backref_assign_error val[0] } lhs: variable { result = assignable val[0] } | primary_value tLBRACK2 aref_args tRBRACK { result = aryset val[0], val[2] } | primary_value tDOT tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value tDOT tCONSTANT { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value tCOLON2 tCONSTANT { if (in_def || in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) } | tCOLON3 tCONSTANT { if (in_def || in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) } | backref { backref_assign_error val[0] } cname: tIDENTIFIER { yyerror "class/module name must be CONSTANT" } | tCONSTANT cpath: tCOLON3 cname { result = s(:colon3, val[1].to_sym) } | cname { result = val[0].to_sym } | primary_value tCOLON2 cname { result = s(:colon2, val[0], val[2].to_sym) } fname: tIDENTIFIER | tCONSTANT | tFID | op { lexer.lex_state = :expr_end result = val[0] } | reswords { lexer.lex_state = :expr_end result = val[0] } fsym: fname | symbol fitem: fsym { result = s(:lit, val[0].to_sym) } | dsym undef_list: fitem { result = new_undef val[0] } | undef_list tCOMMA { lexer.lex_state = :expr_fname } fitem { result = new_undef val[0], val[3] } op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ | tMATCH | tGT | tGEQ | tLT | tLEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 reswords: k__LINE__ | k__FILE__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE | kCLASS | kDEF | kDEFINED | kDO | kELSE | kELSIF | kEND | kENSURE | kFALSE | kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT | kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL arg: lhs tEQL arg { result = new_assign val[0], val[2] } | lhs tEQL arg kRESCUE_MOD arg { result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) # result.line = val[0].line } | var_lhs tOP_ASGN arg { result = new_op_asgn val } | primary_value tLBRACK2 aref_args tRBRACK tOP_ASGN arg { result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) val[2].sexp_type = :arglist if val[2] } | primary_value tDOT tIDENTIFIER tOP_ASGN arg { result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN arg { result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | tCOLON3 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | backref tOP_ASGN arg { backref_assign_error val[0] } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end } | arg tPLUS arg { result = new_call val[0], :+, argl(val[2]) } | arg tMINUS arg { result = new_call val[0], :-, argl(val[2]) } | arg tSTAR2 arg { result = new_call val[0], :*, argl(val[2]) } | arg tDIVIDE arg { result = new_call val[0], :"/", argl(val[2]) } | arg tPERCENT arg { result = new_call val[0], :"%", argl(val[2]) } | arg tPOW arg { result = new_call val[0], :**, argl(val[2]) } | tUMINUS_NUM tINTEGER tPOW arg { result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") } | tUMINUS_NUM tFLOAT tPOW arg { result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") } | tUPLUS arg { if val[1].sexp_type == :lit then result = val[1] else result = new_call val[1], :"+@" end } | tUMINUS arg { result = new_call val[1], :"-@" } | arg tPIPE arg { result = new_call val[0], :"|", argl(val[2]) } | arg tCARET arg { result = new_call val[0], :"^", argl(val[2]) } | arg tAMPER2 arg { result = new_call val[0], :"&", argl(val[2]) } | arg tCMP arg { result = new_call val[0], :"<=>", argl(val[2]) } | arg tGT arg { result = new_call val[0], :">", argl(val[2]) } | arg tGEQ arg { result = new_call val[0], :">=", argl(val[2]) } | arg tLT arg { result = new_call val[0], :"<", argl(val[2]) } | arg tLEQ arg { result = new_call val[0], :"<=", argl(val[2]) } | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) } | arg tEQQ arg { result = new_call val[0], :"===", argl(val[2]) } | arg tNEQ arg { val[0] = value_expr val[0] # TODO: port call_op and clean these val[2] = value_expr val[2] result = s(:not, new_call(val[0], :"==", argl(val[2]))) } | arg tMATCH arg { result = new_match val[0], val[2] } | arg tNMATCH arg { result = s(:not, new_match(val[0], val[2])) } | tBANG arg { result = s(:not, val[1]) } | tTILDE arg { val[2] = value_expr val[2] result = new_call val[1], :"~" } | arg tLSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) } | arg tRSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) } | arg tANDOP arg { result = logical_op :and, val[0], val[2] } | arg tOROP arg { result = logical_op :or, val[0], val[2] } | kDEFINED opt_nl arg { result = s(:defined, val[2]) } | arg tEH arg tCOLON arg { result = s(:if, val[0], val[2], val[4]) } | primary arg_value: arg { result = value_expr(val[0]) } aref_args: none | command opt_nl { warning 'parenthesize argument(s) for future version' result = s(:array, val[0]) } | args trailer { result = val[0] } | args tCOMMA tSTAR arg opt_nl { result = arg_concat val[0], val[3] } | assocs trailer { result = s(:array, s(:hash, *val[0].values)) } | tSTAR arg opt_nl { result = s(:array, s(:splat, val[1])) } paren_args: tLPAREN2 none tRPAREN { result = val[1] } | tLPAREN2 call_args opt_nl tRPAREN { result = val[1] } | tLPAREN2 block_call opt_nl tRPAREN { warning "parenthesize argument(s) for future version" result = s(:array, val[1]) } | tLPAREN2 args tCOMMA block_call opt_nl tRPAREN { warning "parenthesize argument(s) for future version" result = val[1].add val[3] } opt_paren_args: none | paren_args call_args: command { warning "parenthesize argument(s) for future version" result = s(:array, val[0]) } | args opt_block_arg { result = arg_blk_pass val[0], val[1] } | args tCOMMA tSTAR arg_value opt_block_arg { result = arg_concat val[0], val[3] result = arg_blk_pass result, val[4] } | assocs opt_block_arg { result = s(:array, s(:hash, *val[0].values)) result = arg_blk_pass result, val[1] } | assocs tCOMMA tSTAR arg_value opt_block_arg { result = arg_concat s(:array, s(:hash, *val[0].values)), val[3] result = arg_blk_pass result, val[4] } | args tCOMMA assocs opt_block_arg { result = val[0] << s(:hash, *val[2].values) result = arg_blk_pass result, val[3] } | args tCOMMA assocs tCOMMA tSTAR arg opt_block_arg { val[0] << s(:hash, *val[2].values) result = arg_concat val[0], val[5] result = arg_blk_pass result, val[6] } | tSTAR arg_value opt_block_arg { result = arg_blk_pass s(:splat, val[1]), val[2] } | block_arg call_args2: arg_value tCOMMA args opt_block_arg { args = list_prepend val[0], val[2] result = arg_blk_pass args, val[3] } | arg_value tCOMMA block_arg { result = arg_blk_pass val[0], val[2] } | arg_value tCOMMA tSTAR arg_value opt_block_arg { result = arg_concat s(:array, val[0]), val[3] result = arg_blk_pass result, val[4] } | arg_value tCOMMA args tCOMMA tSTAR arg_value opt_block_arg { result = arg_concat s(:array, val[0], s(:hash, *val[2].values)), val[5] result = arg_blk_pass result, val[6] } | assocs opt_block_arg { result = s(:array, s(:hash, *val[0].values)) result = arg_blk_pass result, val[1] } | assocs tCOMMA tSTAR arg_value opt_block_arg { result = s(:array, s(:hash, *val[0].values), val[3]) result = arg_blk_pass result, val[4] } | arg_value tCOMMA assocs opt_block_arg { result = s(:array, val[0], s(:hash, *val[2].values)) result = arg_blk_pass result, val[3] } | arg_value tCOMMA args tCOMMA assocs opt_block_arg { arg_value, _, args, _, assocs, opt_block = val result = s(:array, arg_value).add_all(args) result.add(s(:hash, *assocs.sexp_body)) result = arg_blk_pass result, opt_block } | arg_value tCOMMA assocs tCOMMA tSTAR arg_value opt_block_arg { result = arg_concat s(:array, val[0]).add(s(:hash, *val[2].sexp_body)), val[5] result = arg_blk_pass result, val[6] } | arg_value tCOMMA args tCOMMA assocs tCOMMA tSTAR arg_value opt_block_arg { result = arg_concat s(:array, val[0]).add_all(val[2]).add(s(:hash, *val[4].values)), val[7] result = arg_blk_pass result, val[8] } | tSTAR arg_value opt_block_arg { result = arg_blk_pass s(:splat, val[1]), val[2] } | block_arg command_args: { result = lexer.cmdarg.stack.dup lexer.cmdarg.push true } open_args { lexer.cmdarg.stack.replace val[0] result = val[1] } open_args: call_args | tLPAREN_ARG { lexer.lex_state = :expr_endarg } tRPAREN { warning "don't put space before argument parentheses" result = nil } | tLPAREN_ARG call_args2 { lexer.lex_state = :expr_endarg } tRPAREN { warning "don't put space before argument parentheses" result = val[1] } block_arg: tAMPER arg_value { result = s(:block_pass, val[1]) } opt_block_arg: tCOMMA block_arg { result = val[1] } | none args: arg_value { result = s(:array, val[0]) } | args tCOMMA arg_value { result = list_append val[0], val[2] } mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = arg_concat val[0], val[3] } | tSTAR arg_value { result = s(:splat, val[1]) } primary: literal | strings | xstring | regexp | words | qwords | var_ref | backref | tFID { result = new_call nil, val[0].to_sym } | kBEGIN { result = self.lexer.lineno } bodystmt kEND { unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] } | tLPAREN_ARG expr { lexer.lex_state = :expr_endarg } opt_nl tRPAREN { warning "(...) interpreted as grouped expression" result = val[1] } | tLPAREN compstmt tRPAREN { result = val[1] || s(:nil) result.paren = true } | primary_value tCOLON2 tCONSTANT { result = s(:colon2, val[0], val[2].to_sym) } | tCOLON3 tCONSTANT { result = s(:colon3, val[1].to_sym) } | primary_value tLBRACK2 aref_args tRBRACK { result = new_aref val } | tLBRACK aref_args tRBRACK { result = val[1] || s(:array) } | tLBRACE { result = self.lexer.lineno } assoc_list tRCURLY { result = new_hash val } | kRETURN { result = s(:return) } | kYIELD tLPAREN2 call_args tRPAREN { result = new_yield val[2] } | kYIELD tLPAREN2 tRPAREN { result = new_yield } | kYIELD { result = new_yield } | kDEFINED opt_nl tLPAREN2 expr tRPAREN { result = s(:defined, val[3]) } | operation brace_block { oper, iter = val[0], val[1] call = new_call(nil, oper.to_sym) iter.insert 1, call result = iter call.line = iter.line } | method_call | method_call brace_block { call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call result = iter } | kIF expr_value then compstmt if_tail kEND { result = new_if val[1], val[3], val[4] } | kUNLESS expr_value then compstmt opt_else kEND { result = new_if val[1], val[4], val[3] } | kWHILE { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_while val[5], val[2], true } | kUNTIL { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_until val[5], val[2], true } | kCASE expr_value opt_terms case_body kEND { (_, line), expr, _, body, _ = val result = new_case expr, body, line } | kCASE opt_terms case_body kEND { (_, line), _, body, _ = val result = new_case nil, body, line } | kCASE opt_terms kELSE compstmt kEND # TODO: need a test { (_, line), _, _, elsebody, _ = val result = new_case nil, elsebody, line } | kFOR for_var kIN { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_for val[4], val[1], val[7] } | kCLASS { result = self.lexer.lineno } cpath superclass { self.comments.push self.lexer.comments if (in_def || in_single > 0) then yyerror "class definition in method body" end self.env.extend } bodystmt kEND { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kCLASS tLSHFT { result = self.lexer.lineno } expr { result = in_def self.in_def = false } term { result = in_single self.in_single = 0 self.env.extend } bodystmt kEND { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kMODULE { result = self.lexer.lineno } cpath { self.comments.push self.lexer.comments yyerror "module definition in method body" if in_def or in_single > 0 self.env.extend } bodystmt kEND { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kDEF fname { result = self.in_def self.comments.push self.lexer.comments self.in_def = true self.env.extend } f_arglist bodystmt kEND { in_def = val[2] result = new_defn val self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body } | kDEF singleton dot_or_colon { self.comments.push self.lexer.comments lexer.lex_state = :expr_fname } fname { self.in_single += 1 self.env.extend lexer.lex_state = :expr_end # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body } | kBREAK { result = s(:break) } | kNEXT { result = s(:next) } | kREDO { result = s(:redo) } | kRETRY { result = s(:retry) } primary_value: primary { result = value_expr(val[0]) } then: term | tCOLON | kTHEN | term kTHEN do: term | tCOLON | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { result = s(:if, val[1], val[3], val[4]) } opt_else: none | kELSE compstmt { result = val[1] } for_var: lhs | mlhs { val[0].delete_at 1 if val[0][1].nil? # HACK } block_par: mlhs_item { result = s(:array, clean_mlhs(val[0])) } | block_par tCOMMA mlhs_item { result = list_append val[0], clean_mlhs(val[2]) } block_var: block_par { result = block_var18 val[0], nil, nil } | block_par tCOMMA { result = block_var18 val[0], nil, nil } | block_par tCOMMA tAMPER lhs { result = block_var18 val[0], nil, val[3] } | block_par tCOMMA tSTAR lhs tCOMMA tAMPER lhs { result = block_var18 val[0], val[3], val[6] } | block_par tCOMMA tSTAR tCOMMA tAMPER lhs { result = block_var18 val[0], s(:splat), val[5] } | block_par tCOMMA tSTAR lhs { result = block_var18 val[0], val[3], nil } | block_par tCOMMA tSTAR { result = block_var18 val[0], s(:splat), nil } | tSTAR lhs tCOMMA tAMPER lhs { result = block_var18 nil, val[1], val[4] } | tSTAR tCOMMA tAMPER lhs { result = block_var18 nil, s(:splat), val[3] } | tSTAR lhs { result = block_var18 nil, val[1], nil } | tSTAR { result = block_var18 nil, s(:splat), nil } | tAMPER lhs { result = block_var18 nil, nil, val[1] } ; opt_block_var: none { result = 0 } | tPIPE tPIPE { result = s(:args) self.lexer.command_start = true } | tOROP { result = s(:args) self.lexer.command_start = true } | tPIPE block_var tPIPE { result = val[1] self.lexer.command_start = true } do_block: kDO_BLOCK { self.env.extend :dynamic result = self.lexer.lineno } opt_block_var { result = nil # self.env.dynamic.keys } compstmt kEND { vars = val[2] body = val[4] result = new_iter nil, vars, body result.line = val[1] self.env.unextend } block_call: command do_block { block_dup_check val[0], val[1] result = val[1] result.insert 1, val[0] } | block_call tDOT operation2 opt_paren_args { result = new_call val[0], val[2], val[3] } | block_call tCOLON2 operation2 opt_paren_args { result = new_call val[0], val[2], val[3] } method_call: operation { result = self.lexer.lineno } paren_args { result = new_call nil, val[0].to_sym, val[2] } | primary_value tDOT operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation2 paren_args { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation3 { result = new_call val[0], val[2].to_sym } | kSUPER paren_args { result = new_super val[1] } | kSUPER { result = s(:zsuper) } brace_block: tLCURLY { self.env.extend :dynamic result = self.lexer.lineno } opt_block_var { result = nil # self.env.dynamic.keys } compstmt tRCURLY { # REFACTOR args = val[2] body = val[4] result = new_iter nil, args, body self.env.unextend result.line = val[1] } | kDO { self.env.extend :dynamic result = self.lexer.lineno } opt_block_var { result = nil # self.env.dynamic.keys } compstmt kEND { args = val[2] body = val[4] result = new_iter nil, args, body self.env.unextend result.line = val[1] } case_body: kWHEN { result = self.lexer.lineno } when_args then compstmt cases { result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] } when_args: args | args tCOMMA tSTAR arg_value { result = list_append val[0], s(:splat, val[3]) } | tSTAR arg_value { result = s(:array, s(:splat, val[1])) } cases: opt_else | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above } | { result = nil } exc_list: arg_value { result = s(:array, val[0]) } | mrhs | none exc_var: tASSOC lhs { result = val[1] } | none opt_ensure: kENSURE compstmt { if (val[1] != nil) then result = val[1] else result = s(:nil) end } | none literal: numeric { result = s(:lit, val[0]) } | symbol { result = s(:lit, val[0]) } | dsym strings: string { val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] } string: string1 | string string1 { result = literal_concat val[0], val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = val[1] } | tSTRING { result = new_string val } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = new_xstring val[1] } regexp: tREGEXP_BEG xstring_contents tREGEXP_END { result = new_regexp val } words: tWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tWORDS_BEG word_list tSTRING_END { result = val[1] } word_list: none { result = new_word_list } | word_list word tSPACE { result = val[0] << new_word_list_entry(val) } word: string_content | word string_content { result = literal_concat val[0], val[1] } qwords: tQWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tQWORDS_BEG qword_list tSTRING_END { result = val[1] } qword_list: none { result = new_qword_list } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << new_qword_list_entry(val) } string_contents: none { result = s(:str, "") } | string_contents string_content { result = literal_concat(val[0], val[1]) } xstring_contents: none { result = nil } | xstring_contents string_content { result = literal_concat(val[0], val[1]) } string_content: tSTRING_CONTENT { result = new_string val } | tSTRING_DVAR { result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg } string_dvar { lexer.lex_strterm = val[1] result = s(:evstr, val[2]) } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_beg } compstmt tRCURLY { _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else raise "unknown string body: #{stmt.inspect}" end } string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } | tIVAR { result = s(:ivar, val[0].to_sym) } | tCVAR { result = s(:cvar, val[0].to_sym) } | backref symbol: tSYMBEG sym { lexer.lex_state = :expr_end result = val[1].to_sym } | tSYMBOL { result = val[0].to_sym } sym: fname | tIVAR | tGVAR | tCVAR dsym: tSYMBEG xstring_contents tSTRING_END { lexer.lex_state = :expr_end result = val[1] yyerror "empty symbol literal" if result.nil? or result.empty? case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) else result = s(:dsym, "", result) end } numeric: tINTEGER | tFLOAT | tUMINUS_NUM tINTEGER =tLOWEST { result = -val[1] # TODO: pt_testcase } | tUMINUS_NUM tFLOAT =tLOWEST { result = -val[1] # TODO: pt_testcase } variable: tIDENTIFIER | tIVAR | tGVAR | tCONSTANT | tCVAR | kNIL { result = s(:nil) } | kSELF { result = s(:self) } | kTRUE { result = s(:true) } | kFALSE { result = s(:false) } | k__FILE__ { result = s(:str, self.file) } | k__LINE__ { result = s(:lit, lexer.lineno) } var_ref: variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } var_lhs: variable { result = assignable val[0] } backref: tNTH_REF { result = s(:nth_ref, val[0]) } | tBACK_REF { result = s(:back_ref, val[0]) } superclass: term { result = nil } | tLT { lexer.lex_state = :expr_beg } expr_value term { result = val[2] } | error term { yyerrok result = nil } f_arglist: tLPAREN2 f_args opt_nl tRPAREN { result = val[1] lexer.lex_state = :expr_beg self.lexer.command_start = true } | f_args term { result = val[0] } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg { result = args val } | f_arg tCOMMA f_optarg opt_f_block_arg { result = args val } | f_arg tCOMMA f_rest_arg opt_f_block_arg { result = args val } | f_arg opt_f_block_arg { result = args val } | f_optarg tCOMMA f_rest_arg opt_f_block_arg { result = args val } | f_optarg opt_f_block_arg { result = args val } | f_rest_arg opt_f_block_arg { result = args val } | f_block_arg { result = args val } | { result = args val } f_norm_arg: tCONSTANT { yyerror "formal argument cannot be a constant" } | tIVAR { yyerror "formal argument cannot be an instance variable" } | tGVAR { yyerror "formal argument cannot be a global variable" } | tCVAR { yyerror "formal argument cannot be a class variable" } | tIDENTIFIER { identifier = val[0].to_sym self.env[identifier] = :lvar result = val[0] } f_arg: f_norm_arg { result = s(:args) result << val[0].to_sym } | f_arg tCOMMA f_norm_arg { val[0] << val[2].to_sym result = val[0] } f_opt: tIDENTIFIER tEQL arg_value { result = assignable val[0], val[2] # TODO: detect duplicate names } f_optarg: f_opt { result = s(:block, val[0]) } | f_optarg tCOMMA f_opt { result = block_append val[0], val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { # TODO: differs from parse.y - needs tests name = val[1].to_sym assignable name result = :"*#{name}" } | restarg_mark { name = :"*" self.env[name] = :lvar result = name } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { identifier = val[1].to_sym self.env[identifier] = :lvar result = s(:block_arg, identifier.to_sym) } opt_f_block_arg: tCOMMA f_block_arg { result = val[1] } | { result = nil } singleton: var_ref | tLPAREN2 { lexer.lex_state = :expr_beg } expr opt_nl tRPAREN { result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit } assoc_list: none # [!nil] { result = s(:array) } | assocs trailer # [!nil] { result = val[0] } | args trailer { size = val[0].size if (size % 2 != 1) then # != 1 because of leading :array yyerror "Odd number (#{size}) list for Hash. #{val[0].inspect}" end result = val[0] } assocs: assoc | assocs tCOMMA assoc { list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list } assoc: arg_value tASSOC arg_value { result = s(:array, val[0], val[2]) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 opt_terms: | terms opt_nl: | tNL trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI { yyerrok } none: { result = nil } end ---- inner require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ruby_parser-3.11.0/lib/ruby_parser_extras.rb0000444000004100000410000010231013277753330021204 0ustar www-datawww-data# encoding: ASCII-8BIT require "sexp" require "ruby_lexer" require "timeout" require "rp_extensions" require "rp_stringscanner" module RubyParserStuff VERSION = "3.11.0" attr_accessor :lexer, :in_def, :in_single, :file attr_reader :env, :comments $good20 = [] %w[ ].map(&:to_i).each do |n| $good20[n] = n end def debug20 n, v = nil, r = nil raise "not yet #{n} #{v.inspect} => #{r.inspect}" unless $good20[n] end def self.deprecate old, new define_method old do |*args| warn "DEPRECATED: #{old} -> #{new} from #{caller.first}" send new, *args end end has_enc = "".respond_to? :encoding # This is in sorted order of occurrence according to # charlock_holmes against 500k files, with UTF_8 forced # to the top. # # Overwrite this contstant if you need something different. ENCODING_ORDER = [ Encoding::UTF_8, # moved to top to reflect default in 2.0 Encoding::ISO_8859_1, Encoding::ISO_8859_2, Encoding::ISO_8859_9, Encoding::SHIFT_JIS, Encoding::WINDOWS_1252, Encoding::EUC_JP ] if has_enc def syntax_error msg raise RubyParser::SyntaxError, msg end def arg_blk_pass node1, node2 # TODO: nuke node1 = s(:arglist, node1) unless [:arglist, :call_args, :array, :args].include? node1.sexp_type node1 << node2 if node2 node1 end def arg_concat node1, node2 # TODO: nuke raise "huh" unless node2 node1 << s(:splat, node2).compact node1 end def clean_mlhs sexp case sexp.sexp_type when :masgn then if sexp.size == 2 and sexp[1].sexp_type == :array then s(:masgn, *sexp[1].sexp_body.map { |sub| clean_mlhs sub }) else debug20 5 sexp end when :gasgn, :iasgn, :lasgn, :cvasgn then if sexp.size == 2 then sexp.last else debug20 7 sexp # optional value end else raise "unsupported type: #{sexp.inspect}" end end def block_var *args result = self.args args result.sexp_type = :masgn result end def block_var18 ary, splat, block ary ||= s(:array) if splat then splat = splat[1] unless Symbol === splat ary << "*#{splat}".to_sym end ary << "&#{block[1]}".to_sym if block if ary.length > 2 or ary.splat then # HACK s(:masgn, *ary.sexp_body) else ary.last end end def array_to_hash array case array.sexp_type when :kwsplat then array else s(:hash, *array.sexp_body) end end def call_args args result = s(:call_args) args.each do |arg| case arg when Sexp then case arg.sexp_type when :array, :args, :call_args then # HACK? remove array at some point result.concat arg.sexp_body else result << arg end when Symbol then result << arg when ",", nil then # ignore else raise "unhandled: #{arg.inspect} in #{args.inspect}" end end result end def args args result = s(:args) args.each do |arg| case arg when Sexp then case arg.sexp_type when :args, :block, :array, :call_args then # HACK call_args mismatch result.concat arg.sexp_body when :block_arg then result << :"&#{arg.last}" when :shadow then if Sexp === result.last and result.last.sexp_type == :shadow then result.last << arg.last else result << arg end when :masgn, :block_pass, :hash then # HACK: remove. prolly call_args result << arg else raise "unhandled: #{arg.sexp_type} in #{args.inspect}" end when Symbol then name = arg.to_s.delete("&*") self.env[name.to_sym] = :lvar unless name.empty? result << arg when ",", "|", ";", "(", ")", nil then # ignore else raise "unhandled: #{arg.inspect} in #{args.inspect}" end end result end def aryset receiver, index index ||= s() s(:attrasgn, receiver, :"[]=", *index.sexp_body).compact # [].sexp_body => nil end def assignable(lhs, value = nil) id = lhs.to_sym unless Sexp === lhs id = id.to_sym if Sexp === id raise "write a test 1" if id.to_s =~ /^(?:self|nil|true|false|__LINE__|__FILE__)$/ raise SyntaxError, "Can't change the value of #{id}" if id.to_s =~ /^(?:self|nil|true|false|__LINE__|__FILE__)$/ result = case id.to_s when /^@@/ then asgn = in_def || in_single > 0 s((asgn ? :cvasgn : :cvdecl), id) when /^@/ then s(:iasgn, id) when /^\$/ then s(:gasgn, id) when /^[A-Z]/ then s(:cdecl, id) else case self.env[id] when :lvar, :dvar, nil then s(:lasgn, id) else raise "wtf? unknown type: #{self.env[id]}" end end self.env[id] ||= :lvar if result.sexp_type == :lasgn result << value if value return result end def block_append(head, tail) return head if tail.nil? return tail if head.nil? line = [head.line, tail.line].compact.min head = remove_begin(head) head = s(:block, head) unless head.node_type == :block head.line = line head << tail end def cond node return nil if node.nil? node = value_expr node case node.sexp_type when :lit then if Regexp === node.last then return s(:match, node) else return node end when :and then return s(:and, cond(node[1]), cond(node[2])) when :or then return s(:or, cond(node[1]), cond(node[2])) when :dot2 then label = "flip#{node.hash}" env[label] = :lvar _, lhs, rhs = node return s(:flip2, lhs, rhs) when :dot3 then label = "flip#{node.hash}" env[label] = :lvar _, lhs, rhs = node return s(:flip3, lhs, rhs) else return node end end ## # for pure ruby systems only def do_parse _racc_do_parse_rb(_racc_setup, false) end if ENV['PURE_RUBY'] def new_match lhs, rhs if lhs then case lhs.sexp_type when :dregx, :dregx_once then return s(:match2, lhs, rhs).line(lhs.line) when :lit then return s(:match2, lhs, rhs).line(lhs.line) if Regexp === lhs.last end end if rhs then case rhs.sexp_type when :dregx, :dregx_once then return s(:match3, rhs, lhs).line(lhs.line) when :lit then return s(:match3, rhs, lhs).line(lhs.line) if Regexp === rhs.last end end return new_call(lhs, :"=~", argl(rhs)).line(lhs.line) end # TODO: remove in 4.0 or 2018-01, whichever is first deprecate :get_match_node, :new_match def gettable(id) lineno = id.lineno if id.respond_to? :lineno id = id.to_sym if String === id result = case id.to_s when /^@@/ then s(:cvar, id) when /^@/ then s(:ivar, id) when /^\$/ then s(:gvar, id) when /^[A-Z]/ then s(:const, id) else type = env[id] if type then s(type, id) else new_call(nil, id) end end result.line lineno if lineno raise "identifier #{id.inspect} is not valid" unless result result end ## # Canonicalize conditionals. Eg: # # not x ? a : b # # becomes: # # x ? b : a attr_accessor :canonicalize_conditions def initialize(options = {}) super() v = self.class.name[/1[89]|2[01]/] self.lexer = RubyLexer.new v && v.to_i self.lexer.parser = self @env = RubyParserStuff::Environment.new @comments = [] @canonicalize_conditions = true self.reset end def list_append list, item # TODO: nuke me *sigh* return s(:array, item) unless list list = s(:array, list) unless Sexp === list && list.sexp_type == :array list << item end def list_prepend item, list # TODO: nuke me *sigh* list = s(:array, list) unless Sexp === list && list.sexp_type == :array list.insert 1, item list end def literal_concat head, tail # TODO: ugh. rewrite return tail unless head return head unless tail htype, ttype = head.sexp_type, tail.sexp_type head = s(:dstr, '', head) if htype == :evstr case ttype when :str then if htype == :str head.last << tail.last elsif htype == :dstr and head.size == 2 then head.last << tail.last else head << tail end when :dstr then if htype == :str then lineno = head.line tail[1] = head.last + tail[1] head = tail head.line = lineno else tail.sexp_type = :array tail[1] = s(:str, tail[1]) tail.delete_at 1 if tail[1] == s(:str, '') head.push(*tail.sexp_body) end when :evstr then if htype == :str then f, l = head.file, head.line head = s(:dstr, *head.sexp_body) head.file = f head.line = l end if head.size == 2 and tail.size > 1 and tail[1].sexp_type == :str then head.last << tail[1].last head.sexp_type = :str if head.size == 2 # HACK ? else head.push(tail) end else x = [head, tail] raise "unknown type: #{x.inspect}" end return head end def logical_op type, left, right left = value_expr left if left and left.sexp_type == type and not left.paren then node, rhs = left, nil loop do _, _lhs, rhs = node break unless rhs && rhs.sexp_type == type and not rhs.paren node = rhs end node[2] = s(type, rhs, right) return left end return s(type, left, right) end # TODO: remove in 4.0 or 2018-01, whichever is first deprecate :logop, :logical_op def new_aref val val[2] ||= s(:arglist) val[2].sexp_type = :arglist if val[2].sexp_type == :array # REFACTOR new_call val[0], :"[]", val[2] end def new_body val body, resbody, elsebody, ensurebody = val result = body if resbody then result = s(:rescue) result << body if body res = resbody while res do result << res res = res.resbody(true) end result << elsebody if elsebody result.line = (body || resbody).line end if elsebody and not resbody then warning("else without rescue is useless") result = s(:begin, result) if result result = block_append(result, elsebody) end result = s(:ensure, result, ensurebody).compact if ensurebody result end def argl x x = s(:arglist, x) if x and x.sexp_type == :array x end def backref_assign_error ref # TODO: need a test for this... obviously case ref.sexp_type when :nth_ref then raise "write a test 2" raise SyntaxError, "Can't set variable %p" % ref.last when :back_ref then raise "write a test 3" raise SyntaxError, "Can't set back reference %p" % ref.last else raise "Unknown backref type: #{ref.inspect}" end end def new_call recv, meth, args = nil, call_op = :'.' result = case call_op.to_sym when :'.' s(:call, recv, meth) when :'&.' s(:safe_call, recv, meth) else raise "unknown call operator: `#{type.inspect}`" end # TODO: need a test with f(&b) to produce block_pass # TODO: need a test with f(&b) { } to produce warning if args if [:arglist, :args, :array, :call_args].include? args.sexp_type result.concat args.sexp_body else result << args end end line = result.grep(Sexp).map(&:line).compact.min result.line = line if line result end def new_attrasgn recv, meth, call_op meth = :"#{meth}=" result = case call_op.to_sym when :'.' s(:attrasgn, recv, meth) when :'&.' s(:safe_attrasgn, recv, meth) else raise "unknown call operator: `#{type.inspect}`" end result.line = recv.line result end def new_case expr, body, line result = s(:case, expr) while body and body.node_type == :when result << body body = body.delete_at 3 end result[2..-1].each do |node| block = node.block(:delete) node.concat block.sexp_body if block end # else body = nil if body == s(:block) result << body result.line = line result end def new_class val line, path, superclass, body = val[1], val[2], val[3], val[5] result = s(:class, path, superclass) if body then if body.sexp_type == :block then result.push(*body.sexp_body) else result.push body end end result.line = line result.comments = self.comments.pop result end def new_compstmt val result = void_stmts(val.grep(Sexp)[0]) result = remove_begin(result) if result result end def new_defn val (_, line), name, _, args, body, * = val body ||= s(:nil) result = s(:defn, name.to_sym, args) if body then if body.sexp_type == :block then result.push(*body.sexp_body) else result.push body end end args.line line result.line = line result.comments = self.comments.pop result end def new_defs val recv, name, args, body = val[1], val[4], val[6], val[7] body ||= s(:nil) result = s(:defs, recv, name.to_sym, args) if body then if body.sexp_type == :block then result.push(*body.sexp_body) else result.push body end end result.line = recv.line result.comments = self.comments.pop result end def new_for expr, var, body result = s(:for, expr, var).line(var.line) result << body if body result end def new_hash val s(:hash, *val[2].values).line(val[1]) end def new_if c, t, f l = [c.line, t && t.line, f && f.line].compact.min c = cond c c, t, f = c.last, f, t if c.sexp_type == :not and canonicalize_conditions s(:if, c, t, f).line(l) end def new_iter call, args, body body ||= nil args ||= s(:args) args = s(:args, args) if Symbol === args result = s(:iter) result << call if call result << args result << body if body args.sexp_type = :args unless args == 0 result end def new_masgn_arg rhs, wrap = false rhs = value_expr(rhs) rhs = s(:to_ary, rhs) if wrap # HACK: could be array if lhs isn't right rhs end def new_masgn lhs, rhs, wrap = false _, ary = lhs rhs = value_expr(rhs) rhs = ary ? s(:to_ary, rhs) : s(:array, rhs) if wrap lhs.delete_at 1 if ary.nil? lhs << rhs lhs end def new_module val line, path, body = val[1], val[2], val[4] result = s(:module, path) if body then # REFACTOR? if body.sexp_type == :block then result.push(*body.sexp_body) else result.push body end end result.line = line result.comments = self.comments.pop result end def new_op_asgn val lhs, asgn_op, arg = val[0], val[1].to_sym, val[2] name = lhs.value arg = remove_begin(arg) result = case asgn_op # REFACTOR when :"||" then lhs << arg s(:op_asgn_or, self.gettable(name), lhs) when :"&&" then lhs << arg s(:op_asgn_and, self.gettable(name), lhs) else # TODO: why [2] ? lhs[2] = new_call(self.gettable(name), asgn_op, argl(arg)) lhs end result.line = lhs.line result end def new_op_asgn2 val recv, call_op, meth, op, arg = val meth = :"#{meth}=" result = case call_op.to_sym when :'.' s(:op_asgn2, recv, meth, op.to_sym, arg) when :'&.' s(:safe_op_asgn2, recv, meth, op.to_sym, arg) else raise "unknown call operator: `#{type.inspect}`" end result.line = recv.line result end def new_regexp val node = val[1] || s(:str, '') options = val[2] o, k = 0, nil options.split(//).uniq.each do |c| # FIX: this has a better home v = { 'x' => Regexp::EXTENDED, 'i' => Regexp::IGNORECASE, 'm' => Regexp::MULTILINE, 'o' => Regexp::ONCE, 'n' => Regexp::ENC_NONE, 'e' => Regexp::ENC_EUC, 's' => Regexp::ENC_SJIS, 'u' => Regexp::ENC_UTF8, }[c] raise "unknown regexp option: #{c}" unless v o += v # encoding options are ignored on 1.9+ k = c if c =~ /[esu]/ if RUBY_VERSION < "1.9" end case node.sexp_type when :str then node.sexp_type = :lit node[1] = if k then Regexp.new(node[1], o, k) else begin Regexp.new(node[1], o) rescue RegexpError => e warn "WA\RNING: #{e.message} for #{node[1].inspect} #{options.inspect}" begin warn "WA\RNING: trying to recover with ENC_UTF8" Regexp.new(node[1], Regexp::ENC_UTF8) rescue RegexpError => e warn "WA\RNING: trying to recover with ENC_NONE" Regexp.new(node[1], Regexp::ENC_NONE) end end end when :dstr then if options =~ /o/ then node.sexp_type = :dregx_once else node.sexp_type = :dregx end node << o if o and o != 0 else node = s(:dregx, '', node); node.sexp_type = :dregx_once if options =~ /o/ node << o if o and o != 0 end node end def new_resbody cond, body if body && body.sexp_type == :block then body.shift # remove block and splat it in directly else body = [body] end s(:resbody, cond, *body).line cond.line end def new_sclass val recv, in_def, in_single, body = val[3], val[4], val[6], val[7] result = s(:sclass, recv) if body then if body.sexp_type == :block then result.push(*body.sexp_body) else result.push body end end result.line = val[2] self.in_def = in_def self.in_single = in_single result end def new_string val str = val[0] str.force_encoding("ASCII-8BIT") unless str.valid_encoding? unless RUBY_VERSION < "1.9" result = s(:str, str) self.lexer.fixup_lineno str.count("\n") result end def new_qword_list_entry val str = val[1] str.force_encoding("ASCII-8BIT") unless str.valid_encoding? unless RUBY_VERSION < "1.9" result = s(:str, str) self.lexer.fixup_lineno result end def new_qword_list result = s(:array) self.lexer.fixup_lineno result end def new_word_list result = s(:array) self.lexer.fixup_lineno result end def new_word_list_entry val result = val[1].sexp_type == :evstr ? s(:dstr, "", val[1]) : val[1] self.lexer.fixup_lineno result end def new_qsym_list result = s(:array) self.lexer.fixup_lineno result end def new_qsym_list_entry val result = s(:lit, val[1].to_sym) self.lexer.fixup_lineno result end def new_symbol_list result = s(:array) self.lexer.fixup_lineno result end def new_symbol_list_entry val _list, sym, _nil = val # TODO: use _list result = val[1] result ||= s(:str, "") case sym.sexp_type when :dstr then sym.sexp_type = :dsym when :str then sym = s(:lit, sym.last.to_sym) else debug20 24 sym = s(:dsym, "", sym || s(:str, "")) end self.lexer.fixup_lineno sym end def new_super args if args && args.node_type == :block_pass then s(:super, args) else args ||= s(:arglist) s(:super, *args.sexp_body) end end def new_undef n, m = nil if m then block_append(n, s(:undef, m)) else s(:undef, n) end end def new_until block, expr, pre new_until_or_while :until, block, expr, pre end def new_until_or_while type, block, expr, pre other = type == :until ? :while : :until line = [block && block.line, expr.line].compact.min block, pre = block.last, false if block && block.sexp_type == :begin expr = cond expr result = unless expr.sexp_type == :not and canonicalize_conditions then s(type, expr, block, pre) else s(other, expr.last, block, pre) end result.line = line result end def new_when cond, body s(:when, cond, body) end def new_while block, expr, pre new_until_or_while :while, block, expr, pre end def new_xstring str if str then case str.sexp_type when :str str.sexp_type = :xstr when :dstr str.sexp_type = :dxstr else str = s(:dxstr, '', str) end str else s(:xstr, '') end end def new_yield args = nil # TODO: raise args.inspect unless [:arglist].include? args.first # HACK raise "write a test 4" if args && args.node_type == :block_pass raise SyntaxError, "Block argument should not be given." if args && args.node_type == :block_pass args ||= s(:arglist) args.sexp_type = :arglist if [:call_args, :array].include? args.sexp_type args = s(:arglist, args) unless args.sexp_type == :arglist return s(:yield, *args.sexp_body) end def next_token token = self.lexer.next_token if token and token.first != RubyLexer::EOF then return token else return [false, '$end'] end end def new_assign lhs, rhs return nil unless lhs rhs = value_expr rhs case lhs.sexp_type when :lasgn, :iasgn, :cdecl, :cvdecl, :gasgn, :cvasgn, :attrasgn, :safe_attrasgn then lhs << rhs when :const then lhs.sexp_type = :cdecl lhs << rhs else raise "unknown lhs #{lhs.inspect} w/ #{rhs.inspect}" end lhs end # TODO: remove in 4.0 or 2018-01, whichever is first deprecate :node_assign, :new_assign ## # Returns a UTF-8 encoded string after processing BOMs and magic # encoding comments. # # Holy crap... ok. Here goes: # # Ruby's file handling and encoding support is insane. We need to be # able to lex a file. The lexer file is explicitly UTF-8 to make # things cleaner. This allows us to deal with extended chars in # class and method names. In order to do this, we need to encode all # input source files as UTF-8. First, we look for a UTF-8 BOM by # looking at the first line while forcing its encoding to # ASCII-8BIT. If we find a BOM, we strip it and set the expected # encoding to UTF-8. Then, we search for a magic encoding comment. # If found, it overrides the BOM. Finally, we force the encoding of # the input string to whatever was found, and then encode that to # UTF-8 for compatibility with the lexer. def handle_encoding str str = str.dup has_enc = str.respond_to? :encoding encoding = nil header = str.lines.first(2) header.map! { |s| s.force_encoding "ASCII-8BIT" } if has_enc first = header.first || "" encoding, str = "utf-8", str[3..-1] if first =~ /\A\xEF\xBB\xBF/ encoding = $1.strip if header.find { |s| s[/^#.*?-\*-.*?coding:\s*([^ ;]+).*?-\*-/, 1] || s[/^#.*(?:en)?coding(?:\s*[:=])\s*([\w-]+)/, 1] } if encoding then if has_enc then encoding.sub!(/utf-8-.+$/, 'utf-8') # HACK for stupid emacs formats hack_encoding str, encoding else warn "Skipping magic encoding comment" end else # nothing specified... ugh. try to encode as utf-8 hack_encoding str if has_enc end str end def hack_encoding str, extra = nil encodings = ENCODING_ORDER.dup encodings.unshift(extra) unless extra.nil? # terrible, horrible, no good, very bad, last ditch effort. encodings.each do |enc| begin str.force_encoding enc if str.valid_encoding? then str.encode! Encoding::UTF_8 break end rescue Encoding::InvalidByteSequenceError # do nothing rescue Encoding::UndefinedConversionError # do nothing end end # no amount of pain is enough for you. raise "Bad encoding. Need a magic encoding comment." unless str.encoding.name == "UTF-8" end ## # Parse +str+ at path +file+ and return a sexp. Raises # Timeout::Error if it runs for more than +time+ seconds. def process(str, file = "(string)", time = 10) Timeout.timeout time do raise "bad val: #{str.inspect}" unless String === str str = handle_encoding str self.file = file.dup @yydebug = ENV.has_key? 'DEBUG' # HACK -- need to get tests passing more than have graceful code self.lexer.ss = RPStringScanner.new str do_parse end end alias :parse :process def remove_begin node oldnode = node if node and node.sexp_type == :begin and node.size == 2 then node = node.last node.line = oldnode.line end node end def reset lexer.reset self.in_def = false self.in_single = 0 self.env.reset self.comments.clear end def block_dup_check call_or_args, block syntax_error "Both block arg and actual block given." if block and call_or_args.block_pass? end def inverted? val [:return, :next, :break, :yield].include? val[0].sexp_type end def invert_block_call val (type, call), iter = val iter.insert 1, call [iter, s(type)] end def ret_args node if node then raise "write a test 5" if node.sexp_type == :block_pass raise SyntaxError, "block argument should not be given" if node.sexp_type == :block_pass node.sexp_type = :array if node.sexp_type == :call_args node = node.last if node.sexp_type == :array && node.size == 2 # HACK matz wraps ONE of the FOUR splats in a newline to # distinguish. I use paren for now. ugh node = s(:svalue, node) if node.sexp_type == :splat and not node.paren node.sexp_type = :svalue if node.sexp_type == :arglist && node[1].sexp_type == :splat end node end def s(*args) result = Sexp.new(*args) result.line ||= lexer.lineno if lexer.ss # otherwise... result.file = self.file result end def value_expr oldnode # HACK node = remove_begin oldnode node.line = oldnode.line if oldnode node[2] = value_expr node[2] if node and node.sexp_type == :if node end def void_stmts node return nil unless node return node unless node.sexp_type == :block if node.respond_to? :sexp_body= then node.sexp_body = node.sexp_body.map { |n| remove_begin n } else node[1..-1] = node[1..-1].map { |n| remove_begin(n) } end node end def warning s # do nothing for now end alias yyerror syntax_error def on_error(et, ev, values) super rescue Racc::ParseError => e # I don't like how the exception obscures the error message e.message.replace "%s:%p :: %s" % [self.file, lexer.lineno, e.message.strip] warn e.message if $DEBUG raise end class Keyword class KWtable attr_accessor :name, :state, :id0, :id1 def initialize(name, id=[], state=nil) @name = name @id0, @id1 = id @state = state end end ## # :stopdoc: # # :expr_beg = ignore newline, +/- is a sign. # :expr_end = newline significant, +/- is a operator. # :expr_arg = newline significant, +/- is a operator. # :expr_cmdarg = newline significant, +/- is a operator. # :expr_endarg = newline significant, +/- is a operator. # :expr_mid = newline significant, +/- is a operator. # :expr_fname = ignore newline, no reserved words. # :expr_dot = right after . or ::, no reserved words. # :expr_class = immediate after class, no here document. wordlist = [ ["end", [:kEND, :kEND ], :expr_end ], ["else", [:kELSE, :kELSE ], :expr_beg ], ["case", [:kCASE, :kCASE ], :expr_beg ], ["ensure", [:kENSURE, :kENSURE ], :expr_beg ], ["module", [:kMODULE, :kMODULE ], :expr_beg ], ["elsif", [:kELSIF, :kELSIF ], :expr_beg ], ["def", [:kDEF, :kDEF ], :expr_fname ], ["rescue", [:kRESCUE, :kRESCUE_MOD ], :expr_mid ], ["not", [:kNOT, :kNOT ], :expr_beg ], ["then", [:kTHEN, :kTHEN ], :expr_beg ], ["yield", [:kYIELD, :kYIELD ], :expr_arg ], ["for", [:kFOR, :kFOR ], :expr_beg ], ["self", [:kSELF, :kSELF ], :expr_end ], ["false", [:kFALSE, :kFALSE ], :expr_end ], ["retry", [:kRETRY, :kRETRY ], :expr_end ], ["return", [:kRETURN, :kRETURN ], :expr_mid ], ["true", [:kTRUE, :kTRUE ], :expr_end ], ["if", [:kIF, :kIF_MOD ], :expr_beg ], ["defined?", [:kDEFINED, :kDEFINED ], :expr_arg ], ["super", [:kSUPER, :kSUPER ], :expr_arg ], ["undef", [:kUNDEF, :kUNDEF ], :expr_fname ], ["break", [:kBREAK, :kBREAK ], :expr_mid ], ["in", [:kIN, :kIN ], :expr_beg ], ["do", [:kDO, :kDO ], :expr_beg ], ["nil", [:kNIL, :kNIL ], :expr_end ], ["until", [:kUNTIL, :kUNTIL_MOD ], :expr_beg ], ["unless", [:kUNLESS, :kUNLESS_MOD ], :expr_beg ], ["or", [:kOR, :kOR ], :expr_beg ], ["next", [:kNEXT, :kNEXT ], :expr_mid ], ["when", [:kWHEN, :kWHEN ], :expr_beg ], ["redo", [:kREDO, :kREDO ], :expr_end ], ["and", [:kAND, :kAND ], :expr_beg ], ["begin", [:kBEGIN, :kBEGIN ], :expr_beg ], ["__LINE__", [:k__LINE__, :k__LINE__ ], :expr_end ], ["class", [:kCLASS, :kCLASS ], :expr_class ], ["__FILE__", [:k__FILE__, :k__FILE__ ], :expr_end ], ["END", [:klEND, :klEND ], :expr_end ], ["BEGIN", [:klBEGIN, :klBEGIN ], :expr_end ], ["while", [:kWHILE, :kWHILE_MOD ], :expr_beg ], ["alias", [:kALIAS, :kALIAS ], :expr_fname ], ["__ENCODING__", [:k__ENCODING__, :k__ENCODING__], :expr_end], ].map { |args| KWtable.new(*args) } # :startdoc: WORDLIST18 = Hash[*wordlist.map { |o| [o.name, o] }.flatten] WORDLIST19 = Hash[*wordlist.map { |o| [o.name, o] }.flatten] WORDLIST18.delete "__ENCODING__" %w[and case elsif for if in module or unless until when while].each do |k| WORDLIST19[k] = WORDLIST19[k].dup WORDLIST19[k].state = :expr_value end %w[not].each do |k| WORDLIST19[k] = WORDLIST19[k].dup WORDLIST19[k].state = :expr_arg end def self.keyword18 str # REFACTOR WORDLIST18[str] end def self.keyword19 str WORDLIST19[str] end end class Environment attr_reader :env, :dyn def [] k self.all[k] end def []= k, v raise "no" if v == true self.current[k] = v end def all idx = @dyn.index(false) || 0 @env[0..idx].reverse.inject { |env, scope| env.merge scope } end def current @env.first end def extend dyn = false @dyn.unshift dyn @env.unshift({}) end def initialize dyn = false @dyn = [] @env = [] self.reset end def reset @dyn.clear @env.clear self.extend end def unextend @dyn.shift @env.shift raise "You went too far unextending env" if @env.empty? end end class StackState attr_reader :name attr_reader :stack attr_accessor :debug def initialize name, debug=false @name = name @stack = [false] @debug = debug end def reset @stack = [false] warn "#{name}_stack(set): 0" if debug end def inspect "StackState(#{@name}, #{@stack.inspect})" end def is_in_state @stack.last end def lexpop warn "#{name}_stack.lexpop" if debug raise if @stack.size == 0 a = @stack.pop b = @stack.pop @stack.push(a || b) end def pop r = @stack.pop warn "#{name}_stack.pop" if debug @stack.push false if @stack.size == 0 r end def push val @stack.push val c = caller.first c = caller[1] if c =~ /expr_result/ warn "#{name}_stack(push): #{val} at line #{c.clean_caller}" if debug nil end def store result = @stack.dup @stack.replace [false] result end def restore oldstate @stack.replace oldstate end end end ruby_parser-3.11.0/lib/ruby21_parser.y0000644000004100000410000023245213277753330017643 0ustar www-datawww-data# -*- racc -*- class Ruby21Parser token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__ k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG tRATIONAL tIMAGINARY prechigh right tBANG tTILDE tUPLUS right tPOW right tUMINUS_NUM tUMINUS left tSTAR2 tDIVIDE tPERCENT left tPLUS tMINUS left tLSHFT tRSHFT left tAMPER2 left tPIPE tCARET left tGT tGEQ tLT tLEQ nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH left tANDOP left tOROP nonassoc tDOT2 tDOT3 right tEH tCOLON left kRESCUE_MOD right tEQL tOP_ASGN nonassoc kDEFINED right kNOT left kOR kAND nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD nonassoc tLBRACE_ARG nonassoc tLOWEST preclow rule program: { self.lexer.lex_state = :expr_beg } top_compstmt { result = new_compstmt val } top_compstmt: top_stmts opt_terms { result = val[0] } top_stmts: none | top_stmt | top_stmts terms top_stmt { result = self.block_append val[0], val[2] } | error top_stmt top_stmt: stmt { result = val[0] # TODO: remove once I have more confidence this is fixed # result.each_of_type :call_args do |s| # debug20 666, s, result # end } | klBEGIN { if (self.in_def || self.in_single > 0) then debug20 1 yyerror "BEGIN in method" end self.env.extend } tLCURLY top_compstmt tRCURLY { result = new_iter s(:preexe), nil, val[3] } bodystmt: compstmt opt_rescue opt_else opt_ensure { result = new_body val } compstmt: stmts opt_terms { result = new_compstmt val } stmts: none | stmt | stmts terms stmt { result = self.block_append val[0], val[2] } | error stmt { result = val[1] debug20 2, val, result } stmt: kALIAS fitem { lexer.lex_state = :expr_fname result = self.lexer.lineno } fitem { result = s(:alias, val[1], val[3]).line(val[2]) } | kALIAS tGVAR tGVAR { result = s(:valias, val[1].to_sym, val[2].to_sym) } | kALIAS tGVAR tBACK_REF { result = s(:valias, val[1].to_sym, :"$#{val[2]}") } | kALIAS tGVAR tNTH_REF { yyerror "can't make alias for the number variables" } | kUNDEF undef_list { result = val[1] } | stmt kIF_MOD expr_value { result = new_if val[2], val[0], nil } | stmt kUNLESS_MOD expr_value { result = new_if val[2], nil, val[0] } | stmt kWHILE_MOD expr_value { result = new_while val[0], val[2], true } | stmt kUNTIL_MOD expr_value { result = new_until val[0], val[2], true } | stmt kRESCUE_MOD stmt { result = s(:rescue, val[0], new_resbody(s(:array), val[2])) } | klEND tLCURLY compstmt tRCURLY { if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } | var_lhs tOP_ASGN command_call { result = new_op_asgn val } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value call_op tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 4, val, result } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 5, val, result } | backref tOP_ASGN command_call { self.backref_assign_error val[0] } | lhs tEQL mrhs { result = new_assign val[0], s(:svalue, val[2]) } | mlhs tEQL mrhs_arg { result = new_masgn val[0], val[2] } | expr command_asgn: lhs tEQL command_call { result = new_assign val[0], val[2] } | lhs tEQL command_asgn { result = new_assign val[0], val[2] } expr: command_call | expr kAND expr { result = logical_op :and, val[0], val[2] } | expr kOR expr { result = logical_op :or, val[0], val[2] } | kNOT opt_nl expr { result = s(:call, val[2], :"!") } | tBANG command_call { result = s(:call, val[1], :"!") } | arg expr_value: expr { result = value_expr(val[0]) } command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = new_call val[0], val[2].to_sym, val[3] } cmd_brace_block: tLBRACE_ARG { self.env.extend(:dynamic) result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend } fcall: operation { result = new_call nil, val[0].to_sym } command: fcall command_args =tLOWEST { result = val[0].concat val[1].sexp_body # REFACTOR pattern } | fcall command_args cmd_brace_block { result = val[0].concat val[1].sexp_body if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value call_op operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] block_dup_check call, block block.insert 1, call result = block } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block } | kSUPER command_args { result = new_super val[1] } | kYIELD command_args { result = new_yield val[1] } | kRETURN call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { line = val[0].last result = s(:break, ret_args(val[1])).line(line) } | kNEXT call_args { line = val[0].last result = s(:next, ret_args(val[1])).line(line) } mlhs: mlhs_basic | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { result = s(:masgn, s(:array, val[1])) } mlhs_basic: mlhs_head { result = s(:masgn, val[0]) } | mlhs_head mlhs_item { result = s(:masgn, val[0] << val[1].compact) } | mlhs_head tSTAR mlhs_node { result = s(:masgn, val[0] << s(:splat, val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val result = list_append ary1, s(:splat, splat) result.concat ary2.sexp_body result = s(:masgn, result) } | mlhs_head tSTAR { result = s(:masgn, val[0] << s(:splat)) } | mlhs_head tSTAR tCOMMA mlhs_post { ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR mlhs_node { result = s(:masgn, s(:array, s(:splat, val[1]))) } | tSTAR mlhs_node tCOMMA mlhs_post { ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR { result = s(:masgn, s(:array, s(:splat))) } | tSTAR tCOMMA mlhs_post { result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_head: mlhs_item tCOMMA { result = s(:array, val[0]) } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1].compact } mlhs_post: mlhs_item { result = s(:array, val[0]) } | mlhs_post tCOMMA mlhs_item { result = list_append val[0], val[2] } mlhs_node: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER # REFACTOR { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT # REFACTOR? { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } cname: tIDENTIFIER { yyerror "class/module name must be CONSTANT" } | tCONSTANT cpath: tCOLON3 cname { result = s(:colon3, val[1].to_sym) } | cname { result = val[0].to_sym } | primary_value tCOLON2 cname { result = s(:colon2, val[0], val[2].to_sym) } fname: tIDENTIFIER | tCONSTANT | tFID | op { lexer.lex_state = :expr_end result = val[0] } | reswords { lexer.lex_state = :expr_end result = val[0] } fsym: fname | symbol fitem: fsym { result = s(:lit, val[0].to_sym) } | dsym undef_list: fitem { result = new_undef val[0] } | undef_list tCOMMA { lexer.lex_state = :expr_fname } fitem { result = new_undef val[0], val[3] } op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE | kCLASS | kDEF | kDEFINED | kDO | kELSE | kELSIF | kEND | kENSURE | kFALSE | kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT | kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL arg: lhs tEQL arg { result = new_assign val[0], val[2] } | lhs tEQL arg kRESCUE_MOD arg { result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) } | var_lhs tOP_ASGN arg { result = new_op_asgn val } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN arg { result = new_op_asgn2 val } | primary_value call_op tCONSTANT tOP_ASGN arg { result = new_op_asgn2 val } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | tCOLON3 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | backref tOP_ASGN arg { self.backref_assign_error val[0] } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end } | arg tPLUS arg { result = new_call val[0], :+, argl(val[2]) } | arg tMINUS arg { result = new_call val[0], :-, argl(val[2]) } | arg tSTAR2 arg # TODO: rename { result = new_call val[0], :*, argl(val[2]) } | arg tDIVIDE arg { result = new_call val[0], :"/", argl(val[2]) } | arg tPERCENT arg { result = new_call val[0], :"%", argl(val[2]) } | arg tPOW arg { result = new_call val[0], :**, argl(val[2]) } | tUMINUS_NUM simple_numeric tPOW arg { result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") } | tUPLUS arg { result = new_call val[1], :"+@" } | tUMINUS arg { result = new_call val[1], :"-@" } | arg tPIPE arg { result = new_call val[0], :"|", argl(val[2]) } | arg tCARET arg { result = new_call val[0], :"^", argl(val[2]) } | arg tAMPER2 arg { result = new_call val[0], :"&", argl(val[2]) } | arg tCMP arg { result = new_call val[0], :"<=>", argl(val[2]) } | arg tGT arg { result = new_call val[0], :">", argl(val[2]) } | arg tGEQ arg { result = new_call val[0], :">=", argl(val[2]) } | arg tLT arg { result = new_call val[0], :"<", argl(val[2]) } | arg tLEQ arg { result = new_call val[0], :"<=", argl(val[2]) } | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) } | arg tEQQ arg { result = new_call val[0], :"===", argl(val[2]) } | arg tNEQ arg { result = new_call val[0], :"!=", argl(val[2]) } | arg tMATCH arg { result = new_match val[0], val[2] } | arg tNMATCH arg { result = s(:not, new_match(val[0], val[2])) } | tBANG arg { result = new_call val[1], :"!" } | tTILDE arg { result = new_call value_expr(val[1]), :"~" } | arg tLSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) } | arg tRSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) } | arg tANDOP arg { result = logical_op :and, val[0], val[2] } | arg tOROP arg { result = logical_op :or, val[0], val[2] } | kDEFINED opt_nl arg { result = s(:defined, val[2]) } | arg tEH arg opt_nl tCOLON arg { result = s(:if, val[0], val[2], val[5]) } | primary arg_value: arg { result = value_expr(val[0]) } aref_args: none | args trailer { result = args [val[0]] } | args tCOMMA assocs trailer { result = args [val[0], array_to_hash(val[2])] } | assocs trailer { result = args [array_to_hash(val[0])] } paren_args: tLPAREN2 opt_call_args rparen { result = val[1] } opt_paren_args: none | paren_args opt_call_args: none { result = val[0] } | call_args { result = val[0] } | args tCOMMA { result = args val } | args tCOMMA assocs tCOMMA { result = args [val[0], array_to_hash(val[2])] } | assocs tCOMMA { result = args [array_to_hash(val[0])] } call_args: command { warning "parenthesize argument(s) for future version" result = call_args val } | args opt_block_arg { result = call_args val result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { result = call_args [array_to_hash(val[0])] result = self.arg_blk_pass result, val[1] } | args tCOMMA assocs opt_block_arg { result = call_args [val[0], array_to_hash(val[2])] result = self.arg_blk_pass result, val[3] } | block_arg { result = call_args val } command_args: { result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true } call_args { lexer.cmdarg.stack.replace val[0] result = val[1] } block_arg: tAMPER arg_value { result = s(:block_pass, val[1]) } opt_block_arg: tCOMMA block_arg { result = val[1] } | none args: arg_value { result = s(:array, val[0]) } | tSTAR arg_value { result = s(:array, s(:splat, val[1])) } | args tCOMMA arg_value { result = self.list_append val[0], val[2] } | args tCOMMA tSTAR arg_value { result = self.list_append val[0], s(:splat, val[3]) } mrhs_arg: mrhs { result = new_masgn_arg val[0] } | arg_value { result = new_masgn_arg val[0], :wrap } mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = self.arg_concat val[0], val[3] } | tSTAR arg_value { result = s(:splat, val[1]) } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = new_call nil, val[0].to_sym } | kBEGIN { result = self.lexer.lineno } bodystmt kEND { unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] } | tLPAREN_ARG rparen { debug20 13, val, result } | tLPAREN_ARG { result = self.lexer.cmdarg.stack.dup lexer.cmdarg.stack.replace [false] # TODO add api for these } expr { lexer.lex_state = :expr_endarg } rparen { warning "(...) interpreted as grouped expression" lexer.cmdarg.stack.replace val[1] result = val[2] } | tLPAREN compstmt tRPAREN { result = val[1] || s(:nil) result.paren = true } | primary_value tCOLON2 tCONSTANT { result = s(:colon2, val[0], val[2].to_sym) } | tCOLON3 tCONSTANT { result = s(:colon3, val[1].to_sym) } | tLBRACK aref_args tRBRACK { result = val[1] || s(:array) result.sexp_type = :array # aref_args is :args } | tLBRACE { result = self.lexer.lineno } assoc_list tRCURLY { result = new_hash val } | kRETURN { result = s(:return) } | kYIELD tLPAREN2 call_args rparen { result = new_yield val[2] } | kYIELD tLPAREN2 rparen { result = new_yield } | kYIELD { result = new_yield } | kDEFINED opt_nl tLPAREN2 expr rparen { result = s(:defined, val[3]) } | kNOT tLPAREN2 expr rparen { result = s(:call, val[2], :"!") } | kNOT tLPAREN2 rparen { debug20 14, val, result } | fcall brace_block { oper, iter = val[0], val[1] call = oper # FIX iter.insert 1, call result = iter call.line = iter.line } | method_call | method_call brace_block { call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter } | tLAMBDA lambda { result = val[1] # TODO: fix lineno } | kIF expr_value then compstmt if_tail kEND { result = new_if val[1], val[3], val[4] } | kUNLESS expr_value then compstmt opt_else kEND { result = new_if val[1], val[4], val[3] } | kWHILE { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_while val[5], val[2], true } | kUNTIL { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_until val[5], val[2], true } | kCASE expr_value opt_terms case_body kEND { (_, line), expr, _, body, _ = val result = new_case expr, body, line } | kCASE opt_terms case_body kEND { (_, line), _, body, _ = val result = new_case nil, body, line } | kFOR for_var kIN { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_for val[4], val[1], val[7] } | kCLASS { result = self.lexer.lineno } cpath superclass { self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend } bodystmt kEND { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kCLASS tLSHFT { result = self.lexer.lineno } expr { result = self.in_def self.in_def = false } term { result = self.in_single self.in_single = 0 self.env.extend } bodystmt kEND { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kMODULE { result = self.lexer.lineno } cpath { self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend } bodystmt kEND { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kDEF fname { result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend # TODO: local->cmdargs = cmdarg_stack; # TODO: port local_push_gen and local_pop_gen lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body } | kDEF singleton dot_or_colon { self.comments.push self.lexer.comments lexer.lex_state = :expr_fname } fname { self.in_single += 1 self.env.extend lexer.lex_state = :expr_endfn # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body } | kBREAK { result = s(:break) } | kNEXT { result = s(:next) } | kREDO { result = s(:redo) } | kRETRY { result = s(:retry) } primary_value: primary { result = value_expr(val[0]) } # These are really stupid k_begin: kBEGIN k_if: kIF k_unless: kUNLESS k_while: kWHILE k_until: kUNTIL k_case: kCASE k_for: kFOR k_class: kCLASS k_module: kMODULE k_def: kDEF k_end: kEND then: term | kTHEN | term kTHEN do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { result = s(:if, val[1], val[3], val[4]) } opt_else: none | kELSE compstmt { result = val[1] } for_var: lhs | mlhs { val[0].delete_at 1 if val[0][1].nil? # HACK } f_marg: f_norm_arg | tLPAREN f_margs rparen { result = val[1] } f_marg_list: f_marg { result = s(:array, val[0]) } | f_marg_list tCOMMA f_marg { result = list_append val[0], val[2] } f_margs: f_marg_list { args, = val result = block_var args } | f_marg_list tCOMMA tSTAR f_norm_arg { args, _, _, splat = val result = block_var args, "*#{splat}".to_sym } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 } | f_marg_list tCOMMA tSTAR { args, _, _ = val result = block_var args, :* } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { args, _, _, _, args2 = val result = block_var args, :*, args2 } | tSTAR f_norm_arg { _, splat = val result = block_var :"*#{splat}" } | tSTAR f_norm_arg tCOMMA f_marg_list { _, splat, _, args = val result = block_var :"*#{splat}", args } | tSTAR { result = block_var :* } | tSTAR tCOMMA f_marg_list { _, _, args = val result = block_var :*, args } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = call_args val } | f_block_kwarg opt_f_block_arg { result = call_args val } | f_kwrest opt_f_block_arg { result = call_args val } | f_block_arg { result = call_args val } opt_block_args_tail: tCOMMA block_args_tail { result = args val } | none block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_block_optarg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_rest_arg opt_block_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | block_args_tail { result = args val } opt_block_param: none { result = 0 } | block_param_def block_param_def: tPIPE opt_bv_decl tPIPE { result = args val } | tOROP { self.lexer.command_start = true result = s(:args) } | tPIPE block_param opt_bv_decl tPIPE { result = args val } opt_bv_decl: opt_nl | opt_nl tSEMI bv_decls opt_nl { result = args val } bv_decls: bvar { result = args val } | bv_decls tCOMMA bvar { result = args val } bvar: tIDENTIFIER { result = s(:shadow, val[0].to_sym) } | f_bad_arg lambda: { self.env.extend :dynamic result = self.lexer.lineno result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } f_larglist lambda_body { lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body self.env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl rparen { result = args val } | f_args { result = val[0] result = 0 if result == s(:args) } lambda_body: tLAMBEG compstmt tRCURLY { result = val[1] } | kDO_LAMBDA compstmt kEND { result = val[1] } do_block: kDO_BLOCK { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend } block_call: command do_block { # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] } | block_call dot_or_colon operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } | block_call dot_or_colon operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } | block_call dot_or_colon operation2 command_args do_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } method_call: fcall { result = self.lexer.lineno } paren_args { args = self.call_args val[2..-1] result = val[0].concat args.sexp_body } | primary_value call_op operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value tCOLON2 operation2 paren_args { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation3 { result = new_call val[0], val[2].to_sym } | primary_value call_op paren_args { result = new_call val[0], :call, val[2], val[1] } | primary_value tCOLON2 paren_args { result = new_call val[0], :call, val[2] } | kSUPER paren_args { result = new_super val[1] } | kSUPER { result = s(:zsuper) } | primary_value tLBRACK2 opt_call_args rbracket { result = new_aref val } brace_block: tLCURLY { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } | kDO { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } case_body: kWHEN { result = self.lexer.lineno } args then compstmt cases { result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] } cases: opt_else | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above } | { result = nil } exc_list: arg_value { result = s(:array, val[0]) } | mrhs | none exc_var: tASSOC lhs { result = val[1] } | none opt_ensure: kENSURE compstmt { _, body = val result = body || s(:nil) } | none literal: numeric { result = s(:lit, val[0]) } | symbol { result = s(:lit, val[0]) } | dsym strings: string { val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] } string: tCHAR { debug20 23, val, result } | string1 | string string1 { result = self.literal_concat val[0], val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = val[1] } | tSTRING { result = new_string val } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = new_xstring val[1] } regexp: tREGEXP_BEG regexp_contents tREGEXP_END { result = new_regexp val } words: tWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tWORDS_BEG word_list tSTRING_END { result = val[1] } word_list: none { result = new_word_list } | word_list word tSPACE { result = val[0].dup << new_word_list_entry(val) } word: string_content | word string_content { result = self.literal_concat val[0], val[1] } symbols: tSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tSYMBOLS_BEG symbol_list tSTRING_END { result = val[1] } symbol_list: none { result = new_symbol_list } | symbol_list word tSPACE { result = val[0].dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tQWORDS_BEG qword_list tSTRING_END { result = val[1] } qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tQSYMBOLS_BEG qsym_list tSTRING_END { result = val[1] } qword_list: none { result = new_qword_list } | qword_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qword_list_entry(val) } qsym_list: none { result = new_qsym_list } | qsym_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qsym_list_entry(val) } string_contents: none { result = s(:str, "") } | string_contents string_content { result = literal_concat(val[0], val[1]) } xstring_contents: none { result = nil } | xstring_contents string_content { result = literal_concat(val[0], val[1]) } regexp_contents: none { result = nil } | regexp_contents string_content { result = literal_concat(val[0], val[1]) } string_content: tSTRING_CONTENT { result = new_string val } | tSTRING_DVAR { result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg # TODO: expr_value ? } string_dvar { lexer.lex_strterm = val[1] result = s(:evstr, val[2]) } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store, lexer.lex_state, ] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_value } compstmt tRCURLY { # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg lexer.lex_state = oldlex_state case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else debug20 25 raise "unknown string body: #{stmt.inspect}" end } string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } | tIVAR { result = s(:ivar, val[0].to_sym) } | tCVAR { result = s(:cvar, val[0].to_sym) } | backref symbol: tSYMBEG sym { lexer.lex_state = :expr_end result = val[1].to_sym } | tSYMBOL { result = val[0].to_sym } sym: fname | tIVAR | tGVAR | tCVAR dsym: tSYMBEG xstring_contents tSTRING_END { lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) when :evstr then result = s(:dsym, "", result) else debug20 26, val, result end } numeric: simple_numeric | tUMINUS_NUM simple_numeric { result = -val[1] # TODO: pt_testcase } simple_numeric: tINTEGER | tFLOAT | tRATIONAL | tIMAGINARY user_variable: tIDENTIFIER | tIVAR | tGVAR | tCONSTANT | tCVAR keyword_variable: kNIL { result = s(:nil) } | kSELF { result = s(:self) } | kTRUE { result = s(:true) } | kFALSE { result = s(:false) } | k__FILE__ { result = s(:str, self.file) } | k__LINE__ { result = s(:lit, lexer.lineno) } | k__ENCODING__ { result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end } var_ref: user_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } | keyword_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } var_lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 29, val, result } backref: tNTH_REF { result = s(:nth_ref, val[0]) } | tBACK_REF { result = s(:back_ref, val[0]) } superclass: term { result = nil } | tLT { lexer.lex_state = :expr_beg } expr_value term { result = val[2] } | error term { yyerrok result = nil debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] self.lexer.lex_state = :expr_beg self.lexer.command_start = true # TODO: # $$ = parser->parser_in_kwarg; # parser->parser_in_kwarg = 1; } | f_args term { # TODO: parser->parser_in_kwarg = $1; result = val[0] self.lexer.lex_state = :expr_beg self.lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = args val } | f_kwarg opt_f_block_arg { result = args val } | f_kwrest opt_f_block_arg { result = args val } | f_block_arg opt_args_tail: tCOMMA args_tail { result = val[1] } | { result = nil } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_optarg opt_args_tail { result = args val } | f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_rest_arg opt_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | args_tail { result = args val } | { result = args val } f_bad_arg: tCONSTANT { yyerror "formal argument cannot be a constant" } | tIVAR { yyerror "formal argument cannot be an instance variable" } | tGVAR { yyerror "formal argument cannot be a global variable" } | tCVAR { yyerror "formal argument cannot be a class variable" } f_norm_arg: f_bad_arg | tIDENTIFIER { identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier } f_arg_item: f_norm_arg | tLPAREN f_margs rparen { result = val[1] } f_arg: f_arg_item { case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end } | f_arg tCOMMA f_arg_item { list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item } f_label: tLABEL f_kw: f_label arg_value { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } | f_label { label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) } f_block_kw: f_label primary_value { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } | f_label { label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) } f_block_kwarg: f_block_kw | f_block_kwarg tCOMMA f_block_kw { list, _, item = val result = list << item.last } f_kwarg: f_kw | f_kwarg tCOMMA f_kw { result = args val } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { result = :"**#{val[1]}" } | kwrest_mark { result = :"**" } f_opt: f_norm_arg tEQL arg_value { result = self.assignable val[0], val[2] # TODO: detect duplicate names } f_block_opt: f_norm_arg tEQL primary_value { result = self.assignable val[0], val[2] } f_block_optarg: f_block_opt { result = s(:block, val[0]) } | f_block_optarg tCOMMA f_block_opt { result = val[0] result << val[2] } f_optarg: f_opt { result = s(:block, val[0]) } | f_optarg tCOMMA f_opt { result = self.block_append val[0], val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" } | restarg_mark { name = :"*" self.env[name] = :lvar result = name } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym } opt_f_block_arg: tCOMMA f_block_arg { result = val[1] } | { result = nil } singleton: var_ref | tLPAREN2 { lexer.lex_state = :expr_beg } expr rparen { result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit } assoc_list: none # [!nil] { result = s(:array) } | assocs trailer # [!nil] { result = val[0] } assocs: assoc | assocs tCOMMA assoc { list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash } assoc: arg_value tASSOC arg_value { result = s(:array, val[0], val[2]) } | tLABEL opt_nl arg_value { result = s(:array, s(:lit, val[0][0].to_sym), val.last) } | tDSTAR arg_value { result = s(:array, s(:kwsplat, val[1])) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 call_op: tDOT opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN rbracket: opt_nl tRBRACK trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI { yyerrok } none: { result = nil; } end ---- inner require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ruby_parser-3.11.0/lib/ruby21_parser.rb0000644000004100000410000076737413277753330020016 0ustar www-datawww-data# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.14 # from Racc grammer file "". # require 'racc/parser.rb' class Ruby21Parser < RubyParser::Parser require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ##### State transition tables begin ### clist = [ '-604,-101,605,-102,-100,579,271,-604,-604,-604,750,271,-604,-604,-604', '271,-604,221,660,621,-103,-84,-103,-612,998,-604,-604,-604,-604,-100', '83,579,660,579,-70,579,-604,-604,84,-604,-604,-604,-604,-604,579,271', '-98,741,-99,218,219,742,659,222,-106,-102,702,730,222,-105,-101,112', '660,607,606,618,659,-604,-604,-604,-604,-604,-604,-604,-604,-604,-604', '-604,-604,-604,-604,-600,620,-604,-604,-604,730,786,-604,730,-104,-604', '209,270,-604,-604,659,-604,270,-604,210,-604,270,-604,-604,-604,-604', '-604,-604,-604,-418,-604,-604,-604,-94,-101,749,-102,-100,116,-101,-600', '-102,-100,115,-94,-604,-604,-604,-604,-604,-604,270,-604,-91,116,-103', '-604,-604,-604,115,-103,-102,-604,-604,116,-604,116,932,116,115,-89', '115,-90,115,-604,-601,116,116,-97,-93,701,115,115,-96,-92,-604,-604', '211,-604,-604,-604,-604,-604,116,218,219,218,219,115,-280,-94,-92,218', '219,624,116,-280,217,116,605,115,785,660,115,-95,-280,-604,-604,-604', '-604,-604,-604,-604,-604,-604,-604,-604,-604,-604,-604,637,261,-604', '-604,-604,-94,644,318,-94,880,-604,94,95,-604,94,95,659,319,-604,-427', '-604,-94,-604,-604,-604,-604,-604,-604,-604,116,-604,-604,-604,222,115', '605,-103,623,-92,-597,607,606,-92,355,-289,-604,-604,784,-93,762,-604', '-289,-289,-289,222,-101,222,-289,-289,379,-289,-102,222,560,-100,557', '556,555,-512,558,-518,605,-427,-92,610,-512,-92,-598,382,-427,-289,-289', '385,-289,-289,-289,-289,-289,-427,-92,96,97,-504,96,97,406,607,606,605', '-504,408,407,-101,-604,-597,760,-427,-519,-504,575,574,-289,-289,-289', '-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-98,-597,-289', '-289,-289,-507,643,607,606,-604,-289,388,-507,-289,116,404,844,-598', '-289,115,-289,-507,-289,-289,-289,-289,-289,-289,-289,409,-289,-604', '-289,453,607,606,613,-99,-604,-598,605,455,454,-600,-504,-289,-289,-604', '-95,116,-289,-504,-504,-504,115,564,-504,-504,-504,456,-504,-104,-604', '221,564,-604,567,487,-504,-604,-504,-504,-504,537,-600,567,539,273,-604', '525,-504,-504,215,-504,-504,-504,-504,-504,560,1009,557,556,555,818', '558,585,-604,-106,1007,575,574,607,606,603,638,116,605,497,575,574,115', '-504,-504,-504,-504,-504,-504,-504,-504,-504,-504,-504,-504,-504,-504', '218,219,-504,-504,-504,-509,-504,-504,568,-105,-504,605,-509,-504,-504', '-519,-504,568,-504,500,-504,-94,-504,-504,-504,-504,-504,-504,-504,502', '-504,222,-504,560,-103,557,556,555,564,558,-69,978,607,606,608,-504', '-504,-504,-504,567,-504,-507,-504,216,-518,525,770,-90,-507,-507,-507', '-504,222,-507,-507,-507,511,-507,242,-517,-99,562,607,606,625,-507,-517', '-507,-507,-507,512,116,575,574,116,-517,115,-507,-507,115,-507,-507', '-507,-507,-507,-97,-89,-96,-91,222,239,519,1002,276,241,240,237,238', '-106,-98,-105,-100,537,222,537,539,568,536,-507,-507,-507,-507,-507', '-507,-507,-507,-507,-507,-507,-507,-507,-507,273,-290,-507,-507,-507', '-516,-507,-507,-290,522,-507,526,-516,-507,-507,242,-507,-290,-507,534', '-507,-516,-507,-507,-507,-507,-507,-507,-507,540,-507,585,-507,560,-510', '557,556,555,564,558,537,-510,398,539,589,-507,-507,-507,-507,567,-507', '-289,-507,218,219,-511,848,818,-289,-289,-289,-507,-511,-289,-289,-289', '560,-289,557,556,555,562,558,848,818,218,219,-289,-289,-289,572,571', '575,574,590,612,616,-289,-289,264,-289,-289,-289,-289,-289,619,265,622', '629,560,-507,557,556,555,716,558,560,-507,557,556,555,-262,558,719,631', '222,568,635,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289', '-289,-289,636,242,-289,-289,-289,716,787,-289,-504,273,-289,647,716', '-289,-289,-504,-289,242,-289,242,-289,719,-289,-289,-289,-289,-289,-289', '-289,-514,-289,242,-289,239,-513,215,-514,241,240,237,238,-513,959,242', '222,-289,-289,-289,-289,222,-289,746,-289,294,72,73,74,12,60,264,222', '-104,66,67,-84,678,265,70,222,68,69,71,33,34,75,76,119,120,121,122,123', '32,31,30,104,103,105,106,871,872,22,-515,873,110,111,648,11,48,-515', '13,108,107,109,98,59,100,99,101,530,102,110,111,689,94,95,694,45,46', '44,242,246,251,252,253,248,250,258,259,254,255,695,235,236,-337,698', '256,257,502,43,704,-337,36,707,708,61,62,242,710,63,-337,38,239,712', '245,47,241,240,237,238,249,247,243,23,244,714,722,723,91,83,85,86,87', '89,724,726,585,84,92,239,260,733,-239,241,240,65,763,764,81,88,90,765', '-263,96,97,294,72,73,74,12,60,771,487,215,66,67,487,222,789,70,451,68', '69,71,33,34,75,76,261,452,500,502,689,32,31,30,104,103,105,106,222,273', '22,273,689,242,818,648,11,48,222,13,108,107,109,98,59,100,99,101,222', '102,110,111,842,94,95,222,45,46,44,242,246,251,252,253,248,250,258,259', '254,255,818,235,236,215,852,256,257,222,43,-264,588,296,879,882,61,62', '242,707,63,586,38,239,885,245,47,241,240,237,238,249,247,243,23,244', '888,890,892,91,83,85,86,87,89,222,215,894,84,92,239,260,895,528,241', '240,65,689,903,81,88,90,452,-262,96,97,294,72,73,74,12,60,907,909,-290', '66,67,910,222,707,70,-290,68,69,71,33,34,75,76,913,-290,915,917,919', '32,31,30,104,103,105,106,919,222,22,925,927,929,222,632,11,48,939,13', '108,107,109,98,59,100,99,101,940,102,110,111,222,94,95,943,45,46,44', '242,246,251,252,253,248,250,258,259,254,255,215,235,236,215,-265,256', '257,744,43,953,959,36,960,961,61,62,746,963,63,746,38,239,964,245,47', '241,240,237,238,249,247,243,23,244,980,982,-289,91,83,85,86,87,89,-289', '-280,983,84,92,-601,260,987,-280,-289,707,65,992,994,81,88,90,-280,996', '96,97,294,72,73,74,12,60,998,998,215,66,67,1005,1010,1011,70,518,68', '69,71,33,34,75,76,919,516,919,919,1016,32,31,30,104,103,105,106,980', '956,22,557,556,555,-601,558,11,48,-600,13,108,107,109,98,59,100,99,101', '694,102,110,111,980,94,95,1039,45,46,44,242,246,251,252,253,248,250', '258,259,254,255,-517,235,236,-516,1040,256,257,-517,43,1041,-516,36', '1042,998,61,62,-517,998,63,-516,38,239,998,245,47,241,240,237,238,249', '247,243,23,244,222,919,-289,91,83,85,86,87,89,-289,-289,980,84,92,-601', '260,3,-289,-289,,65,,-601,81,88,90,-289,,96,97,294,72,73,74,12,60,,', '215,66,67,,,,70,214,68,69,71,33,34,75,76,,212,,,,32,31,30,104,103,105', '106,,956,22,557,556,555,,558,11,48,,13,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254', '255,-290,235,236,,,256,257,-290,43,,,36,,,61,62,-290,,63,,38,239,,245', '47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92', ',260,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,119,120,121,122,123,32,31,30,104,103,105,106,,,22', '119,120,121,122,123,11,48,,13,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235', '236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238', '249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,222,260,,,,,65,,,81', '88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', '119,120,121,122,123,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252', '253,248,250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63', ',38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87', '89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,8,72,73,74,12,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,', '11,48,10,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46', '44,242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,43', ',,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244', ',,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,294,72', '73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103', '105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236', ',,256,257,,43,,,296,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249', '247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90', ',,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', ',32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258', '259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47', '241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260', ',,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253', '248,250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38', '239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89', ',,,84,92,,260,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,', '11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', '242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,43,', ',36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244', ',,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,294,72', '73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103', '105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236', ',,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249', '247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90', ',,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', ',32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258', '259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47', '241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260', ',,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253', '248,250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38', '239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89', ',,,84,92,,260,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,', '11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', '242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,43,', ',36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244', ',,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,294,72', '73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103', '105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236', ',,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249', '247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90', ',,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', ',32,31,30,104,103,105,106,,560,22,557,556,555,,558,11,48,,13,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,560,,557,556,555', ',558,560,716,557,556,555,,558,,,,924,,43,,,36,242,,61,62,,,63,,38,,', ',47,,,716,256,257,,,23,,716,,,91,83,85,86,87,89,,239,,84,92,241,240', '237,238,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,560,22,557,556,555', ',558,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,242,-624,-624,-624,-624,248,250,,716,-624,-624,,,,,,256,257,,43', ',,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244', ',,,91,83,85,86,87,89,,,,84,92,,560,,557,556,555,65,558,,81,88,90,,,96', '97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,716,,,,,32', '31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,242,-624,-624,-624,-624,248,250,,,-624', '-624,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237', '238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', ',,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258', '259,254,255,,-624,-624,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245', '47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69', '71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,-624,-624', '-624,-624,248,250,,,-624,-624,,,,,,256,257,,43,,,36,,,61,62,,,63,,38', '239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11', '48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242', '246,251,252,253,248,250,258,,254,255,,,,,,256,257,,43,,,36,,,61,62,', ',63,,38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', ',,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46', '44,242,,,,,,,,,,,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47', '241,240,237,238,,,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248', '250,,,254,255,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241', '240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,,,,,,,,,,,,,,,,256', '257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,,,243,23,244', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,8,72,73,74', '12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,22,,,,,,11,48,10,13,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,242,,,,,,,,,,,,,,,,256,257,,43,,,36,,,61,62,,,63,,38', '239,,245,47,241,240,237,238,,,243,23,244,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,,,,,', ',,,,,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237', '238,,,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,', ',96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,', '32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99', '101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258,259', '254,255,,-624,-624,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241', '240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,294,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,-624,-624,-624,-624', '248,250,,,-624,-624,,,,,,256,257,,43,,,296,,,61,62,,,63,,38,239,,245', '47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109', '98,59,100,99,101,287,102,110,111,,94,95,,45,46,44,242,-624,-624,-624', '-624,248,250,,,-624,-624,,,,,,256,257,,227,,,233,,,61,62,,,63,,285,239', '283,245,47,241,240,237,238,249,247,243,232,244,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70', ',68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,', ',48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242', '-624,-624,-624,-624,248,250,,,-624,-624,,,,,,256,257,,227,,,233,,,61', '62,,,63,,,239,,245,47,241,240,237,238,249,247,243,232,244,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234', ',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', '242,,,,,,,,,,,,,,,,256,257,,227,,,233,,,61,62,,,63,,,239,,245,47,241', '240,237,238,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307', '308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,242,,,,,,,,,,,,,,,,256,257,,227,,,233', ',,61,62,,,63,,,239,,245,47,241,240,237,238,,,,232,,,,,91,83,85,86,87', '89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70', ',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48', ',13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,', ',,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234', ',,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,,315', ',,,,,,,,,,,,,,,,,,,305,,,301,,,61,62,,,63,,300,,,,,,,,,,,,,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,', '234,,,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,', '315,,,,,,,,,,,,,,,,,,,,305,,,233,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83', '85,86,87,89,,,,84,92,,,,317,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', '106,,,234,,,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111,,94', '95,,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,61,62,,,63,,,,,,,,,,,,,,,,', ',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', '105,106,,,234,,,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,,,315,,,,,,,,,,,,,,,,,,,,305,,,233,,,61,62,,,63,,,,,,,,,,,,', ',,,,,,91,83,85,86,87,89,,,,84,92,,,,514,,,65,,,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,', ',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', '105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', ',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314', '104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', '47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308', '314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', ',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', ',,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307', '308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', ',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,', ',,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', '61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75', '76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', ',233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', ',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', '312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107', '109,98,59,100,99,101,287,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,', ',,,,,227,,,233,,,61,62,,,63,,,,283,,47,,,,,,,,232,,,,,91,83,85,86,87', '89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111,,94', '95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,283,,47,,', ',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308', '314,104,103,105,106,,,234,,,,,,,309,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,315,,,,,,,,,,,,,,,,,,,,897,,,233,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308', '314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287', '102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,', '63,,672,,283,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312', '75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', ',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', '312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,', ',,,,309,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,,315,,', ',,,,,,,,,,,,,,,,,970,,,233,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,768,,,,47,,,,,,,,232,,,,', '91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,', ',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', ',22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,', ',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', '106,,,234,,,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111,,94', '95,,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,61,62,,,63,,,,,,,,,,,,,,,,', ',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', '105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,672,,,,47', ',,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285', ',283,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,', ',,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', '61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', '61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', '61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,116,,,,', '115,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', '312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,309,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,,,315,,,,,,,,,,,,,,,,,,,,349', ',,36,,,61,62,,,63,,38,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,', ',,,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,', '84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', '105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', ',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314', '104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', '47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314', '104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', '47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308', '314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', ',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307', '308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', ',63,,414,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76', ',,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233', ',,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312', '75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', ',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', '312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,309,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,,,315,,,,,,,,,,,,,,,,,,,,305', ',,301,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,', ',,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312', '75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', ',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', '312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', '105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', ',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314', '104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', '47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285', ',283,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', ',32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99', '101,287,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', '61,62,,,63,,285,,283,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109', '98,59,100,99,101,287,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', ',227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232,,,,,91,83,85,86,87', '89,,,,84,92,222,,,,,,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234', ',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106', ',,234,,,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,', ',,315,,,,,,,,,,,,,,,,,,,,897,,,233,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234', ',,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111,,94,95,,45,46', '44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111,,94', '95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47', ',,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308', '314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', ',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', ',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307', '308,314,104,103,105,106,,,234,,,,,,,309,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,', '47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38', ',,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,398,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287', '102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,', '63,,285,,283,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312', '75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', ',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', '312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108', '107,109,98,59,100,99,101,287,102,110,111,,94,95,,45,46,44,,,,,,,,,,', ',,,,,,,,,227,,,233,,,61,62,,,63,,,,283,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234', ',,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111,,94,95,,45,46', '44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,672,,283,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', '105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,,,47', ',,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314', '104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285', ',,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307', '308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', ',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', ',32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', ',63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32', '31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', '287,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62', ',,63,,285,,283,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', '61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75', '76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,309,,,108,107,109,591', '59,100,99,592,,102,110,111,,94,95,,,,315,,,,,,,,,,,,,,,,,,,,593,,,233', ',,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76', ',,,,,307,308,314,104,103,105,106,,,234,,,,,,,309,,,108,107,109,591,59', '100,99,592,,102,110,111,,94,95,,,,315,,,,,,,,,,,,,,,,,,,,593,,,233,', ',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', ',,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99', '101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61', '62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36', ',,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,', ',398,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311', '312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,287,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,530,,61,62,,,63,,,,,,47,,,,,', ',,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72', '73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103', '105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94', '95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,', ',,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', '105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', ',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,222,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,414,,,,47', ',,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314', '104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', ',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88', '90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,', '307,308,314,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99', '101,287,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', '61,62,,,63,,672,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,', ',,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109', '98,59,100,99,101,287,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', ',227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232,,,,,91,83,85,86,87', '89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105,106,,,234,,', ',,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111,,94,95,,45,46', '44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,', '91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,', ',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,', ',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,414,,,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,311,312,75,76,,,,,,307,308,314,104,103', '105,106,,,234,,,,,,,309,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,,,315,,,,,,,,,,,,,,,,,,,,305,,,301,,,61,62,,,63,,,,,,,,,,,,', ',,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,287,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,', ',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,288,81,88,90,-606', ',96,97,,,,-606,-606,-606,,,-606,-606,-606,560,-606,557,556,555,564,558', ',,,-606,-606,-606,-606,,,567,,,,,-606,-606,,-606,-606,-606,-606,-606', ',,,,,,,,,562,,,,,,,,,,,575,574,,-606,-606,-606,-606,-606,-606,-606,-606', '-606,-606,-606,-606,-606,-606,,,-606,-606,-606,,,-606,,,-606,,,-606', '-606,,-606,568,-606,,-606,,-606,-606,-606,-606,-606,-606,-606,,-606', '-606,-606,,,,,,,,,,,,,-606,-606,-606,-606,-605,-606,,-606,,,,-605,-605', '-605,,,-605,-605,-605,560,-605,557,556,555,564,558,,,,-605,-605,-605', '-605,,,567,,,,,-605,-605,,-605,-605,-605,-605,-605,,,,,,,,,,562,,,,', ',,,,572,571,575,574,,-605,-605,-605,-605,-605,-605,-605,-605,-605,-605', '-605,-605,-605,-605,,,-605,-605,-605,,,-605,,,-605,,,-605,-605,,-605', '568,-605,,-605,,-605,-605,-605,-605,-605,-605,-605,,-605,-605,-605,', ',,,,,,,,,,,-605,-605,-605,-605,-281,-605,,-605,,,,-281,-281,-281,,,-281', '-281,-281,560,-281,557,556,555,564,558,,,,,-281,-281,-281,,,567,,,,', '-281,-281,,-281,-281,-281,-281,-281,,,,,,,,,,562,,,,,,,,,572,571,575', '574,,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281', '-281,,,-281,-281,-281,,,-281,,,-281,,,-281,-281,,-281,568,-281,,-281', ',-281,-281,-281,-281,-281,-281,-281,,-281,,-281,,,,,,,,,,,,,-281,-281', '-281,-281,,-281,,-281,176,187,177,200,173,193,183,182,203,204,198,181', '180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', '199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', ',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', '150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', ',,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203', '204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202', '197,196,189,199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127', '129,,,128,,,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,', '163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144', '136,159,137,,,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193', '183,182,203,204,198,181,180,175,201,205,206,185,174,188,192,194,186', '179,,,,195,202,197,196,189,199,184,172,191,190,,,,,,171,178,169,170', '166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148,145,147', ',,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156,155,151', '152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187,177,200', '173,193,183,182,203,204,198,181,180,175,201,205,206,185,174,188,192', '194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,,171,178', '169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148', '145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156', '155,151,152,146,144,136,159,137,,,165,91,,,,,,,,,,92,,,,,,,,,158,176', '187,177,200,173,193,183,182,203,204,198,181,180,175,201,205,206,185', '174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190,', ',,,,171,178,169,170,166,167,168,127,129,395,394,128,,396,,,,,,,161,162', ',157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,', ',,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,,', ',,,,,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181,180', '175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189,199', '184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,126,,128,,', ',,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', '150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', ',,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203', '204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202', '197,364,363,365,362,172,191,190,,,,,,171,178,169,170,359,360,361,357', '129,100,99,358,,102,,,,,,,161,162,,157,139,140,141,148,145,147,,,142', '143,,,,163,164,149,150,,,,,,371,,,,,,,,154,153,,138,160,156,155,151', '152,146,144,136,159,137,-426,,165,,,,,-426,-426,-426,,,-426,-426,-426', '560,-426,557,556,555,564,558,158,,,-426,-426,-426,,,,567,,,,,-426,-426', ',-426,-426,-426,-426,-426,,,,,,,,,,562,,,,,,,,,,,575,574,,-426,-426', '-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,,,-426,-426', '-426,,,-426,,273,-426,,,-426,-426,,-426,568,-426,,-426,,-426,-426,-426', '-426,-426,-426,-426,,-426,-426,-426,,,,,,,,,,,,-297,-426,-426,,-426', ',-426,-297,-297,-297,,,-297,-297,-297,560,-297,557,556,555,564,558,', ',,,-297,-297,,,,567,,,,,-297,-297,,-297,-297,-297,-297,-297,,,,,,,,', ',562,754,,,,,,,,572,571,575,574,,-297,-297,-297,-297,-297,-297,-297', '-297,-297,-297,-297,-297,-297,-297,,,-297,-297,-297,,,-297,,276,-297', ',,-297,-297,,-297,568,-297,,-297,,-297,-297,-297,-297,-297,-297,-297', ',-297,,-297,,,,,,,,,,,,-623,-297,-297,,-297,,-297,-623,-623,-623,,,-623', '-623,-623,560,-623,557,556,555,564,558,,,,-623,-623,,,,,567,,,,,-623', '-623,,-623,-623,-623,-623,-623,,,,,,,,,,562,,,,,,,,,572,571,575,574', ',-623,,,,,,,-623,-623,-623,,-623,-623,-623,-623,,-623,,-623,,,,,273', '-623,-623,-623,-623,,,,568,,,,,-623,-623,,-623,-623,-623,-623,-623,', '-623,-623,,,,,,,,,,,,,-623,,,,,-623,,,-623,-623,-623,-623,-623,-623', '-623,-623,-623,-623,-623,-623,-623,-623,,,-623,-623,-623,,,-623,,273', '-623,,,-623,-623,,-623,,-623,,-623,,-623,-623,-623,-623,-623,-623,-623', ',-623,-623,-623,,,,,,682,428,,,683,,,-623,-623,,-623,,-623,161,162,', '157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,273,,', ',,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,', '685,435,,,686,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142', '143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156,155,151', '152,146,144,136,159,137,,,165,,,,,650,428,,,651,,,,,,,,,161,162,158', '157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,273,,', ',,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,', '652,435,,,653,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142', '143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156,155,151', '152,146,144,136,159,137,,,165,,,,,485,428,,,486,,,,,,,,,161,162,158', '157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,', ',,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,856', '435,,,857,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143', ',,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156,155,151,152', '146,144,136,159,137,,,165,,,,,485,428,,,486,,,,,,,,,161,162,158,157', '139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,', ',154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,1004', '435,,,1003,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143', ',,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156,155,151,152', '146,144,136,159,137,,560,165,557,556,555,564,558,,,431,435,,,430,,,567', ',,,,158,161,162,,157,139,140,141,148,145,147,,,142,143,,,562,163,164', '149,150,,,,,,273,575,574,,,,,,154,153,,138,160,156,155,151,152,146,144', '136,159,137,,,165,,,,,1034,435,,,1035,,568,,,,,,,161,162,158,157,139', '140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,1032,428', ',,1033,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,', '163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156,155,151,152,146', '144,136,159,137,,,165,,,,,424,428,,,425,,,,,,,,,161,162,158,157,139', '140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,560,165,557,556,555', '564,558,,,,,,,,,,567,,,,,158,,,,,,,,,,,,,,,,,562,546,652,435,,,653,', ',572,571,575,574,,,161,162,,157,139,140,141,148,145,147,,,142,143,,', ',163,164,149,150,,,,,,273,,,,568,,,,154,153,,138,160,156,155,151,152', '146,144,136,159,137,,,165,,,,,650,428,,,651,,,,,,,,,161,162,158,157', '139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,', ',154,153,,138,160,156,155,151,152,146,144,136,159,137,,560,165,557,556', '555,564,558,560,,557,556,555,564,558,,,567,,,,,158,,567,560,,557,556', '555,564,558,,,,,,,,562,,567,,,,,562,,572,571,575,574,,,,,,575,574,,', ',560,562,557,556,555,564,558,,,,,,575,574,,560,567,557,556,555,564,558', '568,,,,,,,568,,567,,,,,,,562,560,,557,556,555,564,558,568,572,571,575', '574,,,562,560,567,557,556,555,564,558,,572,571,575,574,,,,,567,,,,,222', ',562,,,,,,568,,,572,571,575,574,,560,562,557,556,555,564,558,568,,,', ',575,574,,,567,560,,557,556,555,564,558,560,,557,556,555,564,558,568', ',567,,,,,562,,567,,,,,,568,572,571,575,574,,,,560,562,557,556,555,564', '558,,562,,,,575,574,,,567,,,575,574,560,,557,556,555,564,558,,568,,', ',,,,,567,562,,,,,,,,568,,,575,574,,,568,,,,,,562,754,,,,,,,,572,571', '575,574,,,,738,435,,,739,,,,568,,,,,161,162,,157,139,140,141,148,145', '147,,,142,143,,,568,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160', '156,155,151,152,146,144,136,159,137,,,165,,,,,736,428,,,737,,,,,,,,', '161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150', ',,,,,273,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', ',,165,,,,,,,,,,,,,,,,,,,,158' ] racc_action_table = arr = ::Array.new(26218, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '652,1032,383,1034,1047,906,64,652,652,652,597,310,652,652,652,663,652', '22,492,386,737,677,1033,61,1049,652,652,652,652,854,80,853,664,339,677', '340,652,652,80,652,652,652,652,652,928,29,346,593,347,338,338,593,492', '22,350,738,545,855,61,589,736,3,483,383,383,383,664,652,652,652,652', '652,652,652,652,652,652,652,652,652,652,1034,386,652,652,652,581,652', '652,582,739,652,13,64,652,652,483,652,310,652,15,652,663,652,652,652', '652,652,652,652,29,652,652,652,683,1032,597,1034,1047,906,1032,738,1034', '1047,906,737,652,652,652,652,431,652,29,652,854,597,1033,431,431,431', '597,1033,652,431,431,853,431,339,853,340,853,346,339,347,340,431,739', '855,928,350,738,545,855,928,589,736,431,431,16,431,431,431,431,431,937', '692,692,448,448,937,971,683,682,757,757,389,581,971,19,582,617,581,651', '491,582,739,971,431,431,431,431,431,431,431,431,431,431,431,431,431', '431,424,25,431,431,431,683,431,40,683,788,431,315,315,431,44,44,491', '43,431,813,431,683,431,431,431,431,431,431,431,750,431,431,431,48,750', '614,651,389,682,591,617,617,424,72,430,431,431,650,431,617,431,430,430', '430,692,424,448,430,430,87,430,431,757,719,788,719,719,719,362,719,225', '377,813,682,377,362,682,592,88,813,430,430,89,430,430,430,430,430,813', '682,315,315,591,44,44,126,614,614,380,591,126,126,650,856,591,614,813', '226,591,707,707,430,430,430,430,430,430,430,430,430,430,430,430,430', '430,225,591,430,430,430,592,430,377,377,685,430,90,592,430,343,124,719', '592,430,343,430,592,430,430,430,430,430,430,430,207,430,856,430,227', '380,380,380,226,856,592,373,229,228,856,98,430,430,856,430,291,430,98', '98,98,291,704,98,98,98,230,98,430,685,234,882,856,704,266,98,685,98', '98,98,543,685,882,543,269,685,453,98,98,969,98,98,98,98,98,924,969,924', '924,924,985,924,985,685,228,969,704,704,373,373,373,425,755,375,280', '882,882,755,98,98,98,98,98,98,98,98,98,98,98,98,98,98,751,751,98,98', '98,363,98,98,704,453,98,391,363,98,98,42,98,882,98,281,98,425,98,98', '98,98,98,98,98,284,98,287,98,998,425,998,998,998,998,998,295,924,375', '375,375,98,98,98,98,998,98,101,98,18,41,319,633,42,101,101,101,98,297', '101,101,101,298,101,479,968,42,998,391,391,391,101,968,101,101,101,299', '5,998,998,863,968,5,101,101,863,101,101,101,101,101,18,41,319,633,954', '479,305,954,308,479,479,479,479,18,41,319,633,697,309,331,697,998,331', '101,101,101,101,101,101,101,101,101,101,101,101,101,101,314,1010,101', '101,101,967,101,101,1010,316,101,320,967,101,101,323,101,1010,101,329', '101,967,101,101,101,101,101,101,101,333,101,344,101,754,364,754,754', '754,754,754,332,364,345,332,349,101,101,101,101,754,101,653,101,20,20', '365,1018,1018,653,653,653,101,365,653,653,653,716,653,716,716,716,754', '716,725,725,533,533,653,653,653,754,754,754,754,351,379,382,653,653', '27,653,653,653,653,653,385,27,388,410,925,358,925,925,925,716,925,562', '358,562,562,562,413,562,716,415,419,754,422,653,653,653,653,653,653', '653,653,653,653,653,653,653,653,423,478,653,653,653,925,653,653,357', '432,653,440,562,653,653,357,653,461,653,462,653,562,653,653,653,653', '653,653,653,359,653,463,653,478,360,958,359,478,478,478,478,360,958', '464,493,653,653,653,653,494,653,958,653,580,580,580,580,580,580,367', '509,653,580,580,510,513,367,580,515,580,580,580,580,580,580,580,676', '676,676,676,676,580,580,580,580,580,580,580,758,758,580,361,758,758', '758,443,580,580,361,580,580,580,580,580,580,580,580,580,520,580,580', '580,523,580,580,531,580,580,580,443,443,443,443,443,443,443,443,443', '443,443,532,443,443,49,541,443,443,544,580,548,49,580,549,551,580,580', '459,552,580,49,580,443,553,443,580,443,443,443,443,443,443,443,580,443', '561,569,573,580,580,580,580,580,580,576,578,583,580,580,459,443,584', '443,459,459,580,621,624,580,580,580,626,630,580,580,36,36,36,36,36,36', '634,639,224,36,36,645,654,656,36,224,36,36,36,36,36,36,36,662,224,669', '671,679,36,36,36,36,36,36,36,681,684,36,687,688,691,693,655,36,36,696', '36,36,36,36,36,36,36,36,36,703,36,36,36,718,36,36,720,36,36,36,655,655', '655,655,655,655,655,655,655,655,655,727,655,655,348,732,655,655,735', '36,767,348,36,772,790,36,36,460,791,36,348,36,655,793,655,36,655,655', '655,655,655,655,655,36,655,794,795,797,36,36,36,36,36,36,798,321,799', '36,36,460,655,800,321,460,460,36,812,816,36,36,36,321,819,36,36,986', '986,986,986,986,986,820,825,742,986,986,826,827,828,986,742,986,986', '986,986,986,986,986,832,742,833,835,836,986,986,986,986,986,986,986', '838,841,986,843,846,849,859,418,986,986,864,986,986,986,986,986,986', '986,986,986,865,986,986,986,866,986,986,875,986,986,986,418,418,418', '418,418,418,418,418,418,418,418,595,418,418,896,876,418,418,595,986', '893,896,986,897,898,986,986,595,900,986,896,986,418,901,418,986,418', '418,418,418,418,418,418,986,418,926,930,1035,986,986,986,986,986,986', '1035,306,931,986,986,1035,418,936,306,1035,944,986,947,948,986,986,986', '306,949,986,986,753,753,753,753,753,753,950,952,304,753,753,962,970', '973,753,304,753,753,753,753,753,753,753,974,304,975,976,977,753,753', '753,753,753,753,753,979,894,753,894,894,894,1003,894,753,753,1004,753', '753,753,753,753,753,753,753,753,1006,753,753,753,1017,753,753,1022,753', '753,753,781,781,781,781,781,781,781,781,781,781,781,303,781,781,302', '1023,781,781,303,753,1024,302,753,1025,1026,753,753,303,1027,753,302', '753,781,1028,781,753,781,781,781,781,781,781,781,753,781,1031,1036,857', '753,753,753,753,753,753,857,686,1037,753,753,857,781,1,686,857,,753', ',686,753,753,753,686,,753,753,804,804,804,804,804,804,,,17,804,804,', ',,804,17,804,804,804,804,804,804,804,,17,,,,804,804,804,804,804,804', '804,,1002,804,1002,1002,1002,,1002,804,804,,804,804,804,804,804,804', '804,804,804,,804,804,804,,804,804,,804,804,804,438,438,438,438,438,438', '438,438,438,438,438,519,438,438,,,438,438,519,804,,,804,,,804,804,519', ',804,,804,438,,438,804,438,438,438,438,438,438,438,804,438,,,,804,804', '804,804,804,804,,,,804,804,,438,,,,,804,,,804,804,804,,,804,804,808', '808,808,808,808,808,,,,808,808,,,,808,,808,808,808,808,808,808,808,293', '293,293,293,293,808,808,808,808,808,808,808,,,808,9,9,9,9,9,808,808', ',808,808,808,808,808,808,808,808,808,,808,808,808,,808,808,,808,808', '808,482,482,482,482,482,482,482,482,482,482,482,,482,482,,,482,482,', '808,,,808,,,808,808,,,808,,808,482,,482,808,482,482,482,482,482,482', '482,808,482,,,,808,808,808,808,808,808,,,,808,808,482,482,,,,,808,,', '808,808,808,,,808,808,809,809,809,809,809,809,,,,809,809,,,,809,,809', '809,809,809,809,809,809,508,508,508,508,508,809,809,809,809,809,809', '809,,,809,,,,,,809,809,,809,809,809,809,809,809,809,809,809,,809,809', '809,,809,809,,809,809,809,529,529,529,529,529,529,529,529,529,529,529', ',529,529,,,529,529,,809,,,809,,,809,809,,,809,,809,529,,529,809,529', '529,529,529,529,529,529,809,529,,,,809,809,809,809,809,809,,,,809,809', ',529,,,,,809,,,809,809,809,,,809,809,404,404,404,404,404,404,,,,404', '404,,,,404,,404,404,404,404,404,404,404,,,,,,404,404,404,404,404,404', '404,,,404,,,,,,404,404,404,404,404,404,404,404,404,404,404,404,,404', '404,404,,404,404,,404,404,404,24,24,24,24,24,24,24,24,24,24,24,,24,24', ',,24,24,,404,,,404,,,404,404,,,404,,404,24,,24,404,24,24,24,24,24,24', '24,404,24,,,,404,404,404,404,404,404,,,,404,404,,24,,,,,404,,,404,404', '404,,,404,404,301,301,301,301,301,301,,,,301,301,,,,301,,301,301,301', '301,301,301,301,,,,,,301,301,301,301,301,301,301,,,301,,,,,,301,301', ',301,301,301,301,301,301,301,301,301,,301,301,301,,301,301,,301,301', '301,881,881,881,881,881,881,881,881,881,881,881,,881,881,,,881,881,', '301,,,301,,,301,301,,,301,,301,881,,881,301,881,881,881,881,881,881', '881,301,881,,,,301,301,301,301,301,301,,,,301,301,,881,,,,,301,,,301', '301,301,,,301,301,850,850,850,850,850,850,,,,850,850,,,,850,,850,850', '850,850,850,850,850,,,,,,850,850,850,850,850,850,850,,,850,,,,,,850', '850,,850,850,850,850,850,850,850,850,850,,850,850,850,,850,850,,850', '850,850,878,878,878,878,878,878,878,878,878,878,878,,878,878,,,878,878', ',850,,,850,,,850,850,,,850,,850,878,,878,850,878,878,878,878,878,878', '878,850,878,,,,850,850,850,850,850,850,,,,850,850,,878,,,,,850,,,850', '850,850,,,850,850,851,851,851,851,851,851,,,,851,851,,,,851,,851,851', '851,851,851,851,851,,,,,,851,851,851,851,851,851,851,,,851,,,,,,851', '851,,851,851,851,851,851,851,851,851,851,,851,851,851,,851,851,,851', '851,851,278,278,278,278,278,278,278,278,278,278,278,,278,278,,,278,278', ',851,,,851,,,851,851,,,851,,851,278,,278,851,278,278,278,278,278,278', '278,851,278,,,,851,851,851,851,851,851,,,,851,851,,278,,,,,851,,,851', '851,851,,,851,851,899,899,899,899,899,899,,,,899,899,,,,899,,899,899', '899,899,899,899,899,,,,,,899,899,899,899,899,899,899,,,899,,,,,,899', '899,,899,899,899,899,899,899,899,899,899,,899,899,899,,899,899,,899', '899,899,783,783,783,783,783,783,783,783,783,783,783,,783,783,,,783,783', ',899,,,899,,,899,899,,,899,,899,783,,783,899,783,783,783,783,783,783', '783,899,783,,,,899,899,899,899,899,899,,,,899,899,,783,,,,,899,,,899', '899,899,,,899,899,981,981,981,981,981,981,,,,981,981,,,,981,,981,981', '981,981,981,981,981,,,,,,981,981,981,981,981,981,981,,,981,,,,,,981', '981,,981,981,981,981,981,981,981,981,981,,981,981,981,,981,981,,981', '981,981,690,690,690,690,690,690,690,690,690,690,690,,690,690,,,690,690', ',981,,,981,,,981,981,,,981,,981,690,,690,981,690,690,690,690,690,690', '690,981,690,,,,981,981,981,981,981,981,,,,981,981,,690,,,,,981,,,981', '981,981,,,981,981,990,990,990,990,990,990,,,,990,990,,,,990,,990,990', '990,990,990,990,990,,,,,,990,990,990,990,990,990,990,,,990,,,,,,990', '990,,990,990,990,990,990,990,990,990,990,,990,990,990,,990,990,,990', '990,990,779,779,779,779,779,779,779,779,779,779,779,,779,779,,,779,779', ',990,,,990,,,990,990,,,990,,990,779,,779,990,779,779,779,779,779,779', '779,990,779,,,,990,990,990,990,990,990,,,,990,990,,779,,,,,990,,,990', '990,990,,,990,990,903,903,903,903,903,903,,,,903,903,,,,903,,903,903', '903,903,903,903,903,,,,,,903,903,903,903,903,903,903,,,903,,,,,,903', '903,,903,903,903,903,903,903,903,903,903,,903,903,903,,903,903,,903', '903,903,776,776,776,776,776,776,776,776,776,776,776,,776,776,,,776,776', ',903,,,903,,,903,903,,,903,,903,776,,776,903,776,776,776,776,776,776', '776,903,776,,,,903,903,903,903,903,903,,,,903,903,,776,,,,,903,,,903', '903,903,,,903,903,966,966,966,966,966,966,,,,966,966,,,,966,,966,966', '966,966,966,966,966,,,,,,966,966,966,966,966,966,966,,,966,,,,,,966', '966,,966,966,966,966,966,966,966,966,966,,966,966,966,,966,966,,966', '966,966,774,774,774,774,774,774,774,774,774,774,774,,774,774,,,774,774', ',966,,,966,,,966,966,,,966,,966,774,,774,966,774,774,774,774,774,774', '774,966,774,,,,966,966,966,966,966,966,,,,966,966,,774,,,,,966,,,966', '966,966,,,966,966,702,702,702,702,702,702,,,,702,702,,,,702,,702,702', '702,702,702,702,702,,,,,,702,702,702,702,702,702,702,,,702,,,,,,702', '702,,702,702,702,702,702,702,702,702,702,,702,702,702,,702,702,,702', '702,702,769,769,769,769,769,769,769,769,769,769,769,,769,769,,,769,769', ',702,,,702,,,702,702,,,702,,702,769,,769,702,769,769,769,769,769,769', '769,702,769,,,,702,702,702,702,702,702,,,,702,702,,769,,,,,702,,,702', '702,702,,,702,702,818,818,818,818,818,818,,,,818,818,,,,818,,818,818', '818,818,818,818,818,,,,,,818,818,818,818,818,818,818,,842,818,842,842', '842,,842,818,818,,818,818,818,818,818,818,818,818,818,,818,818,818,', '818,818,,818,818,818,844,,844,844,844,,844,978,842,978,978,978,,978', ',,,842,,818,,,818,467,,818,818,,,818,,818,,,,818,,,844,467,467,,,818', ',978,,,818,818,818,818,818,818,,467,,818,818,467,467,467,467,,,818,', ',818,818,818,,,818,818,326,326,326,326,326,326,,,,326,326,,,,326,,326', '326,326,326,326,326,326,,,,,,326,326,326,326,326,326,326,,980,326,980', '980,980,,980,326,326,,326,326,326,326,326,326,326,326,326,,326,326,326', ',326,326,,326,326,326,475,475,475,475,475,475,475,,980,475,475,,,,,', '475,475,,326,,,326,,,326,326,,,326,,326,475,,475,326,475,475,475,475', '475,475,475,326,475,,,,326,326,326,326,326,326,,,,326,326,,1016,,1016', '1016,1016,326,1016,,326,326,326,,,326,326,233,233,233,233,233,233,,', ',233,233,,,,233,,233,233,233,233,233,233,233,1016,,,,,233,233,233,233', '233,233,233,,,233,,,,,,233,233,,233,233,233,233,233,233,233,233,233', ',233,233,233,,233,233,,233,233,233,474,474,474,474,474,474,474,,,474', '474,,,,,,474,474,,233,,,233,,,233,233,,,233,,233,474,,474,233,474,474', '474,474,474,474,474,233,474,,,,233,233,233,233,233,233,,,,233,233,,', ',,,,233,,,233,233,233,,,233,233,759,759,759,759,759,759,,,,759,759,', ',,759,,759,759,759,759,759,759,759,,,,,,759,759,759,759,759,759,759', ',,759,,,,,,759,759,,759,759,759,759,759,759,759,759,759,,759,759,759', ',759,759,,759,759,759,457,457,457,457,457,457,457,457,457,457,457,,457', '457,,,457,457,,759,,,759,,,759,759,,,759,,759,457,,457,759,457,457,457', '457,457,457,457,759,457,,,,759,759,759,759,759,759,,,,759,759,,,,,,', '759,,,759,759,759,,,759,759,752,752,752,752,752,752,,,,752,752,,,,752', ',752,752,752,752,752,752,752,,,,,,752,752,752,752,752,752,752,,,752', ',,,,,752,752,,752,752,752,752,752,752,752,752,752,,752,752,752,,752', '752,,752,752,752,473,473,473,473,473,473,473,,,473,473,,,,,,473,473', ',752,,,752,,,752,752,,,752,,752,473,,473,752,473,473,473,473,473,473', '473,752,473,,,,752,752,752,752,752,752,,,,752,752,,,,,,,752,,,752,752', '752,,,752,752,860,860,860,860,860,860,,,,860,860,,,,860,,860,860,860', '860,860,860,860,,,,,,860,860,860,860,860,860,860,,,860,,,,,,860,860', ',860,860,860,860,860,860,860,860,860,,860,860,860,,860,860,,860,860', '860,481,481,481,481,481,481,481,481,,481,481,,,,,,481,481,,860,,,860', ',,860,860,,,860,,860,481,,481,860,481,481,481,481,481,481,481,860,481', ',,,860,860,860,860,860,860,,,,860,860,,,,,,,860,,,860,860,860,,,860', '860,933,933,933,933,933,933,,,,933,933,,,,933,,933,933,933,933,933,933', '933,,,,,,933,933,933,933,933,933,933,,,933,,,,,,933,933,,933,933,933', '933,933,933,933,933,933,,933,933,933,,933,933,,933,933,933,472,,,,,', ',,,,,,,,,,472,472,,933,,,933,,,933,933,,,933,,933,472,,472,933,472,472', '472,472,,,472,933,472,,,,933,933,933,933,933,933,,,,933,933,,,,,,,933', ',,933,933,933,,,933,933,577,577,577,577,577,577,,,,577,577,,,,577,,577', '577,577,577,577,577,577,,,,,,577,577,577,577,577,577,577,,,577,,,,,', '577,577,,577,577,577,577,577,577,577,577,577,,577,577,577,,577,577,', '577,577,577,480,480,480,480,480,480,480,,,480,480,,,,,,480,480,,577', ',,577,,,577,577,,,577,,577,480,,480,577,480,480,480,480,480,480,480', '577,480,,,,577,577,577,577,577,577,,,,577,577,,,,,,,577,,,577,577,577', ',,577,577,989,989,989,989,989,989,,,,989,989,,,,989,,989,989,989,989', '989,989,989,,,,,,989,989,989,989,989,989,989,,,989,,,,,,989,989,,989', '989,989,989,989,989,989,989,989,,989,989,989,,989,989,,989,989,989,471', ',,,,,,,,,,,,,,,471,471,,989,,,989,,,989,989,,,989,,989,471,,471,989', '471,471,471,471,,,471,989,471,,,,989,989,989,989,989,989,,,,989,989', ',,,,,,989,,,989,989,989,,,989,989,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2', '2,2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2', ',2,2,2,470,,,,,,,,,,,,,,,,470,470,,2,,,2,,,2,2,,,2,,2,470,,470,2,470', '470,470,470,,,470,2,470,,,,2,2,2,2,2,2,,,,2,2,,,,,,,2,,,2,2,2,,,2,2', '209,209,209,209,209,209,,,,209,209,,,,209,,209,209,209,209,209,209,209', ',,,,,209,209,209,209,209,209,209,,,209,,,,,,209,209,,209,209,209,209', '209,209,209,209,209,,209,209,209,,209,209,,209,209,209,469,,,,,,,,,', ',,,,,,469,469,,209,,,209,,,209,209,,,209,,209,469,,469,209,469,469,469', '469,,,469,209,469,,,,209,209,209,209,209,209,,,,209,209,,,,,,,209,,', '209,209,209,,,209,209,701,701,701,701,701,701,,,,701,701,,,,701,,701', '701,701,701,701,701,701,,,,,,701,701,701,701,701,701,701,,,701,,,,,', '701,701,,701,701,701,701,701,701,701,701,701,,701,701,701,,701,701,', '701,701,701,458,458,458,458,458,458,458,458,458,458,458,,458,458,,,458', '458,,701,,,701,,,701,701,,,701,,701,458,,458,701,458,458,458,458,458', '458,458,701,458,,,,701,701,701,701,701,701,,,,701,701,,,,,,,701,,,701', '701,701,,,701,701,296,296,296,296,296,296,,,,296,296,,,,296,,296,296', '296,296,296,296,296,,,,,,296,296,296,296,296,296,296,,,296,,,,,,296', '296,,296,296,296,296,296,296,296,296,296,,296,296,296,,296,296,,296', '296,296,477,477,477,477,477,477,477,,,477,477,,,,,,477,477,,296,,,296', ',,296,296,,,296,,296,477,,477,296,477,477,477,477,477,477,477,296,477', ',,,296,296,296,296,296,296,,,,296,296,,,,,,,296,,,296,296,296,,,296', '296,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34', '34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34', '34,,34,34,34,476,476,476,476,476,476,476,,,476,476,,,,,,476,476,,34', ',,34,,,34,34,,,34,,34,476,34,476,34,476,476,476,476,476,476,476,34,476', ',,,34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,,,34,34,285,285', '285,,285,,,,285,285,,,,285,,285,285,285,285,285,285,285,,,,,,285,285', '285,285,285,285,285,,,285,,,,,,,285,,,285,285,285,285,285,285,285,285', ',285,285,285,,285,285,,285,285,285,468,468,468,468,468,468,468,,,468', '468,,,,,,468,468,,285,,,285,,,285,285,,,285,,,468,,468,285,468,468,468', '468,468,468,468,285,468,,,,285,285,285,285,285,285,,,,285,285,,,,,,', '285,,,285,285,285,,,285,285,288,288,288,,288,,,,288,288,,,,288,,288', '288,288,288,288,288,288,,,,,,288,288,288,288,288,288,288,,,288,,,,,', ',288,,,288,288,288,288,288,288,288,288,,288,288,288,,288,288,,288,288', '288,465,,,,,,,,,,,,,,,,465,465,,288,,,288,,,288,288,,,288,,,465,,465', '288,465,465,465,465,,,,288,,,,,288,288,288,288,288,288,,,,288,288,,', ',,,,288,,,288,288,288,,,288,288,244,244,244,,244,,,,244,244,,,,244,', '244,244,244,244,244,244,244,,,,,,244,244,244,244,244,244,244,,,244,', ',,,,,244,,,244,244,244,244,244,244,244,244,,244,244,244,,244,244,,244', '244,244,466,,,,,,,,,,,,,,,,466,466,,244,,,244,,,244,244,,,244,,,466', ',466,244,466,466,466,466,,,,244,,,,,244,244,244,244,244,244,,,,244,244', ',,,,,,244,,,244,244,244,,,244,244,294,294,294,294,294,,,,294,294,,,', '294,,294,294,294,294,294,294,294,,,,,,294,294,294,294,294,294,294,,', '294,,,,,,294,294,,294,294,294,294,294,294,294,294,294,,294,294,294,', '294,294,,294,294,294,,,,,,,,,,,,,,,,,,,,294,,,294,,,294,294,,,294,,294', ',,,294,,,,,,,,294,,,,,294,294,294,294,294,294,,,,294,294,,,,,,,294,', ',294,294,294,,,294,294,37,37,37,,37,,,,37,37,,,,37,,37,37,37,37,37,37', '37,,,,,,37,37,37,37,37,37,37,,,37,,,,,,,37,,,37,37,37,37,37,37,37,37', ',37,37,37,,37,37,,,,37,,,,,,,,,,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,', ',,,,,,,,,,,,,,,37,37,37,37,37,37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37', '38,38,38,,38,,,,38,38,,,,38,,38,38,38,38,38,38,38,,,,,,38,38,38,38,38', '38,38,,,38,,,,,,,38,,,38,38,38,38,38,38,38,38,,38,38,38,,38,38,,,,38', ',,,,,,,,,,,,,,,,,,,38,,,38,,,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38', '38,38,,,,38,38,,,,38,,,38,,,38,38,38,,,38,38,243,243,243,,243,,,,243', '243,,,,243,,243,243,243,243,243,243,243,,,,,,243,243,243,243,243,243', '243,,,243,,,,,,,243,,,243,243,243,243,243,243,243,243,,243,243,243,', '243,243,,243,243,243,,,,,,,,,,,,,,,,,,,,243,,,243,,,243,243,,,243,,', ',,,243,,,,,,,,243,,,,,243,243,243,243,243,243,,,,243,243,,,,,,,243,', ',243,243,243,,,243,243,678,678,678,,678,,,,678,678,,,,678,,678,678,678', '678,678,678,678,,,,,,678,678,678,678,678,678,678,,,678,,,,,,,678,,,678', '678,678,678,678,678,678,678,,678,678,678,,678,678,,,,678,,,,,,,,,,,', ',,,,,,,,678,,,678,,,678,678,,,678,,,,,,,,,,,,,,,,,,,678,678,678,678', '678,678,,,,678,678,,,,,,,678,,,678,678,678,,,678,678,672,672,672,,672', ',,,672,672,,,,672,,672,672,672,672,672,672,672,,,,,,672,672,672,672', '672,672,672,,,672,,,,,,,672,,,672,672,672,672,672,672,672,672,,672,672', '672,,672,672,,672,672,672,,,,,,,,,,,,,,,,,,,,672,,,672,,,672,672,,,672', ',,,,,672,,,,,,,,672,,,,,672,672,672,672,672,672,,,,672,672,,,,,,,672', ',,672,672,672,,,672,672,300,300,300,,300,,,,300,300,,,,300,,300,300', '300,300,300,300,300,,,,,,300,300,300,300,300,300,300,,,300,,,,,,,300', ',,300,300,300,300,300,300,300,300,,300,300,300,,300,300,,,,300,,,,,', ',,,,,,,,,,,,,,300,,,300,,,300,300,,,300,,,,,,,,,,,,,,,,,,,300,300,300', '300,300,300,,,,300,300,,,,300,,,300,,,300,300,300,,,300,300,848,848', '848,,848,,,,848,848,,,,848,,848,848,848,848,848,848,848,,,,,,848,848', '848,848,848,848,848,,,848,,,,,,,848,,,848,848,848,848,848,848,848,848', ',848,848,848,,848,848,,848,848,848,,,,,,,,,,,,,,,,,,,,848,,,848,,,848', '848,,,848,,,,,,848,,,,,,,,848,,,,,848,848,848,848,848,848,,,,848,848', ',,,,,,848,,,848,848,848,,,848,848,740,740,740,,740,,,,740,740,,,,740', ',740,740,740,740,740,740,740,,,,,,740,740,740,740,740,740,740,,,740', ',,,,,,740,,,740,740,740,740,740,740,740,740,,740,740,740,,740,740,,740', '740,740,,,,,,,,,,,,,,,,,,,,740,,,740,,,740,740,,,740,,,,,,740,,,,,,', ',740,,,,,740,740,740,740,740,740,,,,740,740,,,,,,,740,,,740,740,740', ',,740,740,256,256,256,,256,,,,256,256,,,,256,,256,256,256,256,256,256', '256,,,,,,256,256,256,256,256,256,256,,,256,,,,,,,256,,,256,256,256,256', '256,256,256,256,,256,256,256,,256,256,,256,256,256,,,,,,,,,,,,,,,,,', ',,256,,,256,,,256,256,,,256,,,,,,256,,,,,,,,256,,,,,256,256,256,256', '256,256,,,,256,256,,,,,,,256,,,256,256,256,,,256,256,242,242,242,,242', ',,,242,242,,,,242,,242,242,242,242,242,242,242,,,,,,242,242,242,242', '242,242,242,,,242,,,,,,,242,,,242,242,242,242,242,242,242,242,,242,242', '242,,242,242,,242,242,242,,,,,,,,,,,,,,,,,,,,242,,,242,,,242,242,,,242', ',,,,,242,,,,,,,,242,,,,,242,242,242,242,242,242,,,,242,242,,,,,,,242', ',,242,242,242,,,242,242,241,241,241,,241,,,,241,241,,,,241,,241,241', '241,241,241,241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241', ',,241,241,241,241,241,241,241,241,,241,241,241,,241,241,,241,241,241', ',,,,,,,,,,,,,,,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,241,,,', ',241,241,241,241,241,241,,,,241,241,,,,,,,241,,,241,241,241,,,241,241', '240,240,240,,240,,,,240,240,,,,240,,240,240,240,240,240,240,240,,,,', ',240,240,240,240,240,240,240,,,240,,,,,,,240,,,240,240,240,240,240,240', '240,240,,240,240,240,,240,240,,240,240,240,,,,,,,,,,,,,,,,,,,,240,,', '240,,,240,240,,,240,,,,,,240,,,,,,,,240,,,,,240,240,240,240,240,240', ',,,240,240,,,,,,,240,,,240,240,240,,,240,240,861,861,861,,861,,,,861', '861,,,,861,,861,861,861,861,861,861,861,,,,,,861,861,861,861,861,861', '861,,,861,,,,,,,861,,,861,861,861,861,861,861,861,861,,861,861,861,', '861,861,,861,861,861,,,,,,,,,,,,,,,,,,,,861,,,861,,,861,861,,,861,,', ',,,861,,,,,,,,861,,,,,861,861,861,861,861,861,,,,861,861,,,,,,,861,', ',861,861,861,,,861,861,239,239,239,,239,,,,239,239,,,,239,,239,239,239', '239,239,239,239,,,,,,239,239,239,239,239,239,239,,,239,,,,,,,239,,,239', '239,239,239,239,239,239,239,,239,239,239,,239,239,,239,239,239,,,,,', ',,,,,,,,,,,,,,239,,,239,,,239,239,,,239,,,,,,239,,,,,,,,239,,,,,239', '239,239,239,239,239,,,,239,239,,,,,,,239,,,239,239,239,,,239,239,238', '238,238,,238,,,,238,238,,,,238,,238,238,238,238,238,238,238,,,,,,238', '238,238,238,238,238,238,,,238,,,,,,,238,,,238,238,238,238,238,238,238', '238,,238,238,238,,238,238,,238,238,238,,,,,,,,,,,,,,,,,,,,238,,,238', ',,238,238,,,238,,,,,,238,,,,,,,,238,,,,,238,238,238,238,238,238,,,,238', '238,,,,,,,238,,,238,238,238,,,238,238,648,648,648,,648,,,,648,648,,', ',648,,648,648,648,648,648,648,648,,,,,,648,648,648,648,648,648,648,', ',648,,,,,,,648,,,648,648,648,648,648,648,648,648,,648,648,648,,648,648', ',648,648,648,,,,,,,,,,,,,,,,,,,,648,,,648,,,648,648,,,648,,,,,,648,', ',,,,,,648,,,,,648,648,648,648,648,648,,,,648,648,,,,,,,648,,,648,648', '648,,,648,648,647,647,647,,647,,,,647,647,,,,647,,647,647,647,647,647', '647,647,,,,,,647,647,647,647,647,647,647,,,647,,,,,,,647,,,647,647,647', '647,647,647,647,647,,647,647,647,,647,647,,647,647,647,,,,,,,,,,,,,', ',,,,,,647,,,647,,,647,647,,,647,,,,,,647,,,,,,,,647,,,,,647,647,647', '647,647,647,,,,647,647,,,,,,,647,,,647,647,647,,,647,647,879,879,879', ',879,,,,879,879,,,,879,,879,879,879,879,879,879,879,,,,,,879,879,879', '879,879,879,879,,,879,,,,,,,879,,,879,879,879,879,879,879,879,879,879', '879,879,879,,879,879,,879,879,879,,,,,,,,,,,,,,,,,,,,879,,,879,,,879', '879,,,879,,,,879,,879,,,,,,,,879,,,,,879,879,879,879,879,879,,,,879', '879,,,,,,,879,,879,879,879,879,,,879,879,880,880,880,,880,,,,880,880', ',,,880,,880,880,880,880,880,880,880,,,,,,880,880,880,880,880,880,880', ',,880,,,,,,,880,,,880,880,880,880,880,880,880,880,,880,880,880,,880', '880,,880,880,880,,,,,,,,,,,,,,,,,,,,880,,,880,,,880,880,,,880,,,,,,880', ',,,,,,,880,,,,,880,880,880,880,880,880,,,,880,880,,,,,,,880,,,880,880', '880,,,880,880,237,237,237,,237,,,,237,237,,,,237,,237,237,237,237,237', '237,237,,,,,,237,237,237,237,237,237,237,,,237,,,,,,,237,,,237,237,237', '237,237,237,237,237,,237,237,237,,237,237,,237,237,237,,,,,,,,,,,,,', ',,,,,,237,,,237,,,237,237,,,237,,,,,,237,,,,,,,,237,,,,,237,237,237', '237,237,237,,,,237,237,,,,,,,237,,,237,237,237,,,237,237,644,644,644', ',644,,,,644,644,,,,644,,644,644,644,644,644,644,644,,,,,,644,644,644', '644,644,644,644,,,644,,,,,,,644,,,644,644,644,644,644,644,644,644,,644', '644,644,,644,644,,644,644,644,,,,,,,,,,,,,,,,,,,,644,,,644,,,644,644', ',,644,,,,,,644,,,,,,,,644,,,,,644,644,644,644,644,644,,,,644,644,,,', ',,,644,,,644,644,644,,,644,644,643,643,643,,643,,,,643,643,,,,643,,643', '643,643,643,643,643,643,,,,,,643,643,643,643,643,643,643,,,643,,,,,', ',643,,,643,643,643,643,643,643,643,643,,643,643,643,,643,643,,643,643', '643,,,,,,,,,,,,,,,,,,,,643,,,643,,,643,643,,,643,,,,,,643,,,,,,,,643', ',,,,643,643,643,643,643,643,,,,643,643,,,,,,,643,,,643,643,643,,,643', '643,236,236,236,,236,,,,236,236,,,,236,,236,236,236,236,236,236,236', ',,,,,236,236,236,236,236,236,236,,,236,,,,,,,236,,,236,236,236,236,236', '236,236,236,,236,236,236,,236,236,,236,236,236,,,,,,,,,,,,,,,,,,,,236', ',,236,,,236,236,,,236,,,,,,236,,,,,,,,236,,,,,236,236,236,236,236,236', ',,,236,236,,,,,,,236,,,236,236,236,,,236,236,638,638,638,,638,,,,638', '638,,,,638,,638,638,638,638,638,638,638,,,,,,638,638,638,638,638,638', '638,,,638,,,,,,,638,,,638,638,638,638,638,638,638,638,,638,638,638,', '638,638,,638,638,638,,,,,,,,,,,,,,,,,,,,638,,,638,,,638,638,,,638,,', ',,,638,,,,,,,,638,,,,,638,638,638,638,638,638,,,,638,638,,,,,,,638,', ',638,638,638,,,638,638,637,637,637,,637,,,,637,637,,,,637,,637,637,637', '637,637,637,637,,,,,,637,637,637,637,637,637,637,,,637,,,,,,,637,,,637', '637,637,637,637,637,637,637,,637,637,637,,637,637,,637,637,637,,,,,', ',,,,,,,,,,,,,,637,,,637,,,637,637,,,637,,,,,,637,,,,,,,,637,,,,,637', '637,637,637,637,637,,,,637,637,,,,,,,637,,,637,637,637,,,637,637,636', '636,636,,636,,,,636,636,,,,636,,636,636,636,636,636,636,636,,,,,,636', '636,636,636,636,636,636,,,636,,,,,,,636,,,636,636,636,636,636,636,636', '636,636,636,636,636,,636,636,,636,636,636,,,,,,,,,,,,,,,,,,,,636,,,636', ',,636,636,,,636,,,,636,,636,,,,,,,,636,,,,,636,636,636,636,636,636,', ',,636,636,,,,,,,636,,636,636,636,636,,,636,636,895,895,895,,895,,,,895', '895,,,,895,,895,895,895,895,895,895,895,,,,,,895,895,895,895,895,895', '895,,,895,,,,,,,895,,,895,895,895,895,895,895,895,895,,895,895,895,', '895,895,,,,895,,,,,,,,,,,,,,,,,,,,895,,,895,,,895,895,,,895,,,,,,,,', ',,,,,,,,,,895,895,895,895,895,895,,,,895,895,,,,,,,895,,,895,895,895', ',,895,895,635,635,635,,635,,,,635,635,,,,635,,635,635,635,635,635,635', '635,,,,,,635,635,635,635,635,635,635,,,635,,,,,,,635,,,635,635,635,635', '635,635,635,635,635,635,635,635,,635,635,,635,635,635,,,,,,,,,,,,,,', ',,,,,635,,,635,,,635,635,,,635,,635,,635,,635,,,,,,,,635,,,,,635,635', '635,635,635,635,,,,635,635,,,,,,,635,,635,635,635,635,,,635,635,235', '235,235,,235,,,,235,235,,,,235,,235,235,235,235,235,235,235,,,,,,235', '235,235,235,235,235,235,,,235,,,,,,,235,,,235,235,235,235,235,235,235', '235,,235,235,235,,235,235,,235,235,235,,,,,,,,,,,,,,,,,,,,235,,,235', ',,235,235,,,235,,,,,,235,,,,,,,,235,,,,,235,235,235,235,235,235,,,,235', '235,,,,,,,235,,,235,235,235,,,235,235,45,45,45,,45,,,,45,45,,,,45,,45', '45,45,45,45,45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45', '45,45,45,45,45,,45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45', ',,45,45,,,45,,,,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,', '45,,,45,45,45,,,45,45,632,632,632,,632,,,,632,632,,,,632,,632,632,632', '632,632,632,632,,,,,,632,632,632,632,632,632,632,,,632,,,,,,,632,,,632', '632,632,632,632,632,632,632,,632,632,632,,632,632,,632,632,632,,,,,', ',,,,,,,,,,,,,,632,,,632,,,632,632,,,632,,,,,,632,,,,,,,,632,,,,,632', '632,632,632,632,632,,,,632,632,,,,,,,632,,,632,632,632,,,632,632,46', '46,46,,46,,,,46,46,,,,46,,46,46,46,46,46,46,46,,,,,,46,46,46,46,46,46', '46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46,46,,46,46,46', ',,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,,46,,,,,46,46', '46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,,,46,46,907,907,907,,907,,', ',907,907,,,,907,,907,907,907,907,907,907,907,,,,,,907,907,907,907,907', '907,907,,,907,,,,,,,907,,,907,907,907,907,907,907,907,907,,907,907,907', ',907,907,,,,907,,,,,,,,,,,,,,,,,,,,907,,,907,,,907,907,,,907,,,,,,,', ',,,,,,,,,,,907,907,907,907,907,907,,,,907,907,,,,,,,907,,,907,907,907', ',,907,907,631,631,631,,631,,,,631,631,,,,631,,631,631,631,631,631,631', '631,,,,,,631,631,631,631,631,631,631,,,631,,,,,,,631,,,631,631,631,631', '631,631,631,631,,631,631,631,,631,631,,631,631,631,,,,,,,,,,,,,,,,,', ',,631,,,631,,,631,631,,,631,,631,,,,631,,,,,,,,631,,,,,631,631,631,631', '631,631,,,,631,631,,,,,,,631,,,631,631,631,,,631,631,232,232,232,,232', ',,,232,232,,,,232,,232,232,232,232,232,232,232,,,,,,232,232,232,232', '232,232,232,,,232,,,,,,,232,,,232,232,232,232,232,232,232,232,,232,232', '232,,232,232,,232,232,232,,,,,,,,,,,,,,,,,,,,232,,,232,,,232,232,,,232', ',,,,,232,,,,,,,,232,,,,,232,232,232,232,232,232,,,,232,232,,,,,,,232', ',,232,232,232,,,232,232,602,602,602,,602,,,,602,602,,,,602,,602,602', '602,602,602,602,602,,,,,,602,602,602,602,602,602,602,,,602,,,,,,,602', ',,602,602,602,602,602,602,602,602,,602,602,602,,602,602,,602,602,602', ',,,,,,,,,,,,,,,,,,,602,,,602,,,602,602,,,602,,,,,,602,,,,,,,,602,,,', ',602,602,602,602,602,602,,,,602,602,,,,,,,602,,,602,602,602,,,602,602', '598,598,598,,598,,,,598,598,,,,598,,598,598,598,598,598,598,598,,,,', ',598,598,598,598,598,598,598,,,598,,,,,,,598,,,598,598,598,598,598,598', '598,598,,598,598,598,,598,598,,598,598,598,,,,,,,,,,,,,,,,,,,,598,,', '598,,,598,598,,,598,,,,,,598,,,,,,,,598,,,,,598,598,598,598,598,598', ',,,598,598,,,,,,,598,,,598,598,598,,,598,598,317,317,317,,317,,,,317', '317,,,,317,,317,317,317,317,317,317,317,,,,,,317,317,317,317,317,317', '317,,,317,,,,,,,317,,,317,317,317,317,317,317,317,317,,317,317,317,', '317,317,,,,317,,,,,,,,,,,,,,,,,,,,317,,,317,,,317,317,,,317,,,,,,,,', ',,,,,,,,,,317,317,317,317,317,317,,,,317,317,,,,,,,317,,,317,317,317', ',,317,317,47,47,47,,47,,,,47,47,,,,47,,47,47,47,47,47,47,47,,,,,,47', '47,47,47,47,47,47,,,47,,,,,,,47,,,47,47,47,47,47,47,47,47,,47,47,47', ',47,47,,47,47,47,,,,,,,,,,,,,,,,,,,,47,,,47,,,47,47,,,47,,,,,,47,,,', ',,,,47,,,,,47,47,47,47,47,47,,,,47,47,,,,,,,47,,,47,47,47,,,47,47,932', '932,932,,932,,,,932,932,,,,932,,932,932,932,932,932,932,932,,,,,,932', '932,932,932,932,932,932,,,932,,,,,,,932,,,932,932,932,932,932,932,932', '932,,932,932,932,,932,932,,932,932,932,,,,,,,,,,,,,,,,,,,,932,,,932', ',,932,932,,,932,,932,,,,932,,,,,,,,932,,,,,932,932,932,932,932,932,', ',,932,932,,,,,,,932,,,932,932,932,,,932,932,586,586,586,,586,,,,586', '586,,,,586,,586,586,586,586,586,586,586,,,,,,586,586,586,586,586,586', '586,,,586,,,,,,,586,,,586,586,586,586,586,586,586,586,586,586,586,586', ',586,586,,586,586,586,,,,,,,,,,,,,,,,,,,,586,,,586,,,586,586,,,586,', '586,,586,,586,,,,,,,,586,,,,,586,586,586,586,586,586,,,,586,586,,,,', ',,586,,586,586,586,586,,,586,586,250,250,250,,250,,,,250,250,,,,250', ',250,250,250,250,250,250,250,,,,,,250,250,250,250,250,250,250,,,250', ',,,,,,250,,,250,250,250,250,250,250,250,250,,250,250,250,,250,250,,250', '250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250,,,250,,,,,,250,,,,,,', ',250,,,,,250,250,250,250,250,250,,,,250,250,,,,,,,250,,,250,250,250', ',,250,250,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67,67,67,,,,,,67', '67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67,67,67', ',67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,,67,,,', ',,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67,,,67,67,70', '70,70,,70,,,,70,70,,,,70,,70,70,70,70,70,70,70,,,,,,70,70,70,70,70,70', '70,,,70,,,,,,,70,,,70,70,70,70,70,70,70,70,,70,70,70,,70,70,,70,70,70', ',,,,,,,,,,,,,,,,,,,70,,,70,,,70,70,,,70,,,,,,70,,,,,,,,70,,,,,70,70', '70,70,70,70,,,,70,70,70,,,,,70,70,,,70,70,70,,,70,70,71,71,71,,71,,', ',71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,,71,,', ',,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,,,71,,,,,,,,,,,,', ',,,,,,,71,,,71,,,71,71,,,71,,71,,,,,,,,,,,,,,,,,71,71,71,71,71,71,,', ',71,71,,,,,,,71,,,71,71,71,,,71,71,8,8,8,8,8,,,,8,8,,,,8,,8,8,8,8,8', '8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8,,8,8', ',8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,,8,8,8', '8,8,8,,,,8,8,,,,,,,8,,,8,8,8,,,8,8,254,254,254,,254,,,,254,254,,,,254', ',254,254,254,254,254,254,254,,,,,,254,254,254,254,254,254,254,,,254', ',,,,,,254,,,254,254,254,254,254,254,254,254,,254,254,254,,254,254,,254', '254,254,,,,,,,,,,,,,,,,,,,,254,,,254,,,254,254,,,254,,,,,,254,,,,,,', ',254,,,,,254,254,254,254,254,254,,,,254,254,,,,,,,254,,,254,254,254', ',,254,254,253,253,253,,253,,,,253,253,,,,253,,253,253,253,253,253,253', '253,,,,,,253,253,253,253,253,253,253,,,253,,,,,,,253,,,253,253,253,253', '253,253,253,253,,253,253,253,,253,253,,253,253,253,,,,,,,,,,,,,,,,,', ',,253,,,253,,,253,253,,,253,,,,,,253,,,,,,,,253,,,,,253,253,253,253', '253,253,,,,253,253,,,,,,,253,,,253,253,253,,,253,253,252,252,252,,252', ',,,252,252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252,252,252', '252,252,252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252,,252,252', '252,,252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252,,,252', ',,,,,252,,,,,,,,252,,,,,252,252,252,252,252,252,,,,252,252,,,,,,,252', ',,252,252,252,,,252,252,714,714,714,,714,,,,714,714,,,,714,,714,714', '714,714,714,714,714,,,,,,714,714,714,714,714,714,714,,,714,,,,,,,714', ',,714,714,714,714,714,714,714,714,,714,714,714,,714,714,,714,714,714', ',,,,,,,,,,,,,,,,,,,714,,,714,,,714,714,,,714,,,,,,714,,,,,,,,714,,,', ',714,714,714,714,714,714,,,,714,714,,,,,,,714,,,714,714,714,,,714,714', '251,251,251,,251,,,,251,251,,,,251,,251,251,251,251,251,251,251,,,,', ',251,251,251,251,251,251,251,,,251,,,,,,,251,,,251,251,251,251,251,251', '251,251,,251,251,251,,251,251,,251,251,251,,,,,,,,,,,,,,,,,,,,251,,', '251,,,251,251,,,251,,,,,,251,,,,,,,,251,,,,,251,251,251,251,251,251', ',,,251,251,,,,,,,251,,,251,251,251,,,251,251,257,257,257,,257,,,,257', '257,,,,257,,257,257,257,257,257,257,257,,,,,,257,257,257,257,257,257', '257,,,257,,,,,,,257,,,257,257,257,257,257,257,257,257,,257,257,257,', '257,257,,257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257,,,257,257,,,257,,', ',,,257,,,,,,,,257,,,,,257,257,257,257,257,257,,,,257,257,,,,,,,257,', ',257,257,257,,,257,257,768,768,768,,768,,,,768,768,,,,768,,768,768,768', '768,768,768,768,,,,,,768,768,768,768,768,768,768,,,768,,,,,,,768,,,768', '768,768,768,768,768,768,768,,768,768,768,,768,768,,768,768,768,,,,,', ',,,,,,,,,,,,,,768,,,768,,,768,768,,,768,,,,,,768,,,,,,,,768,,,,,768', '768,768,768,768,768,,,,768,768,,,,,,,768,,,768,768,768,,,768,768,770', '770,770,,770,,,,770,770,,,,770,,770,770,770,770,770,770,770,,,,,,770', '770,770,770,770,770,770,,,770,,,,,,,770,,,770,770,770,770,770,770,770', '770,,770,770,770,,770,770,,770,770,770,,,,,,,,,,,,,,,,,,,,770,,,770', ',,770,770,,,770,,,,,,770,,,,,,,,770,,,,,770,770,770,770,770,770,,,,770', '770,,,,,,,770,,,770,770,770,,,770,770,258,258,258,,258,,,,258,258,,', ',258,,258,258,258,258,258,258,258,,,,,,258,258,258,258,258,258,258,', ',258,,,,,,,258,,,258,258,258,258,258,258,258,258,,258,258,258,,258,258', ',258,258,258,,,,,,,,,,,,,,,,,,,,258,,,258,,,258,258,,,258,,,,,,258,', ',,,,,,258,,,,,258,258,258,258,258,258,,,,258,258,,,,,,,258,,,258,258', '258,,,258,258,414,414,414,,414,,,,414,414,,,,414,,414,414,414,414,414', '414,414,,,,,,414,414,414,414,414,414,414,,,414,,,,,,,414,,,414,414,414', '414,414,414,414,414,,414,414,414,,414,414,,414,414,414,,,,,,,,,,,,,', ',,,,,,414,,,414,,,414,414,,,414,,,,,,414,,,,,,,,414,,,,,414,414,414', '414,414,414,,,,414,414,,,,,,,414,,,414,414,414,,,414,414,694,694,694', ',694,,,,694,694,,,,694,,694,694,694,694,694,694,694,,,,,,694,694,694', '694,694,694,694,,,694,,,,,,,694,,,694,694,694,694,694,694,694,694,,694', '694,694,,694,694,,694,694,694,,,,,,,,,,,,,,,,,,,,694,,,694,,,694,694', ',,694,,694,,,,694,,,,,,,,694,,,,,694,694,694,694,694,694,,,,694,694', ',,,,,,694,,,694,694,694,,,694,694,249,249,249,,249,,,,249,249,,,,249', ',249,249,249,249,249,249,249,,,,,,249,249,249,249,249,249,249,,,249', ',,,,,,249,,,249,249,249,249,249,249,249,249,,249,249,249,,249,249,,249', '249,249,,,,,,,,,,,,,,,,,,,,249,,,249,,,249,249,,,249,,,,,,249,,,,,,', ',249,,,,,249,249,249,249,249,249,,,,249,249,,,,,,,249,,,249,249,249', ',,249,249,248,248,248,,248,,,,248,248,,,,248,,248,248,248,248,248,248', '248,,,,,,248,248,248,248,248,248,248,,,248,,,,,,,248,,,248,248,248,248', '248,248,248,248,,248,248,248,,248,248,,248,248,248,,,,,,,,,,,,,,,,,', ',,248,,,248,,,248,248,,,248,,,,,,248,,,,,,,,248,,,,,248,248,248,248', '248,248,,,,248,248,,,,,,,248,,,248,248,248,,,248,248,689,689,689,,689', ',,,689,689,,,,689,,689,689,689,689,689,689,689,,,,,,689,689,689,689', '689,689,689,,,689,,,,,,,689,,,689,689,689,689,689,689,689,689,,689,689', '689,,689,689,,,,689,,,,,,,,,,,,,,,,,,,,689,,,689,,,689,689,,,689,,,', ',,,,,,,,,,,,,,,689,689,689,689,689,689,,,,689,689,,,,,,,689,,,689,689', '689,,,689,689,784,784,784,,784,,,,784,784,,,,784,,784,784,784,784,784', '784,784,,,,,,784,784,784,784,784,784,784,,,784,,,,,,,784,,,784,784,784', '784,784,784,784,784,,784,784,784,,784,784,,784,784,784,,,,,,,,,,,,,', ',,,,,,784,,,784,,,784,784,,,784,,,,,,784,,,,,,,,784,,,,,784,784,784', '784,784,784,,,,784,784,,,,,,,784,,,784,784,784,,,784,784,785,785,785', ',785,,,,785,785,,,,785,,785,785,785,785,785,785,785,,,,,,785,785,785', '785,785,785,785,,,785,,,,,,,785,,,785,785,785,785,785,785,785,785,,785', '785,785,,785,785,,785,785,785,,,,,,,,,,,,,,,,,,,,785,,,785,,,785,785', ',,785,,,,,,785,,,,,,,,785,,,,,785,785,785,785,785,785,,,,785,785,,,', ',,,785,,,785,785,785,,,785,785,786,786,786,,786,,,,786,786,,,,786,,786', '786,786,786,786,786,786,,,,,,786,786,786,786,786,786,786,,,786,,,,,', ',786,,,786,786,786,786,786,786,786,786,,786,786,786,,786,786,,786,786', '786,,,,,,,,,,,,,,,,,,,,786,,,786,,,786,786,,,786,,,,,,786,,,,,,,,786', ',,,,786,786,786,786,786,786,,,,786,786,,,,,,,786,,,786,786,786,,,786', '786,787,787,787,,787,,,,787,787,,,,787,,787,787,787,787,787,787,787', ',,,,,787,787,787,787,787,787,787,,,787,,,,,,,787,,,787,787,787,787,787', '787,787,787,,787,787,787,,787,787,,787,787,787,,,,,,,,,,,,,,,,,,,,787', ',,787,,,787,787,,,787,,,,,,787,,,,,,,,787,,,,,787,787,787,787,787,787', ',,,787,787,,,,,,,787,,,787,787,787,,,787,787,247,247,247,,247,,,,247', '247,,,,247,,247,247,247,247,247,247,247,,,,,,247,247,247,247,247,247', '247,,,247,,,,,,,247,,,247,247,247,247,247,247,247,247,,247,247,247,', '247,247,,247,247,247,,,,,,,,,,,,,,,,,,,,247,,,247,,,247,247,,,247,,', ',,,247,,,,,,,,247,,,,,247,247,247,247,247,247,,,,247,247,,,,,,,247,', ',247,247,247,,,247,247,789,789,789,,789,,,,789,789,,,,789,,789,789,789', '789,789,789,789,,,,,,789,789,789,789,789,789,789,,,789,,,,,,,789,,,789', '789,789,789,789,789,789,789,,789,789,789,,789,789,,789,789,789,,,,,', ',,,,,,,,,,,,,,789,,,789,,,789,789,,,789,,,,,,789,,,,,,,,789,,,,,789', '789,789,789,789,789,,,,789,789,,,,,,,789,,,789,789,789,,,789,789,259', '259,259,,259,,,,259,259,,,,259,,259,259,259,259,259,259,259,,,,,,259', '259,259,259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259,259,259', '259,,259,259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259', ',,259,259,,,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259,,,,259', '259,,,,,,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260,260,,', ',260,,260,260,260,260,260,260,260,,,,,,260,260,260,260,260,260,260,', ',260,,,,,,,260,,,260,260,260,260,260,260,260,260,,260,260,260,,260,260', ',260,260,260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,,,,,260,', ',,,,,,260,,,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,,,260,260', '260,,,260,260,246,246,246,,246,,,,246,246,,,,246,,246,246,246,246,246', '246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246,246,246', '246,246,246,246,246,,246,246,246,,246,246,,246,246,246,,,,,,,,,,,,,', ',,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,246,,,,,246,246,246', '246,246,246,,,,246,246,,,,,,,246,,,246,246,246,,,246,246,267,267,267', ',267,,,,267,267,,,,267,,267,267,267,267,267,267,267,,,,,,267,267,267', '267,267,267,267,,,267,,,,,,,267,,,267,267,267,267,267,267,267,267,267', '267,267,267,,267,267,,267,267,267,,,,,,,,,,,,,,,,,,,,267,,,267,,,267', '267,,,267,,267,,267,,267,,,,,,,,267,,,,,267,267,267,267,267,267,,,,267', '267,,,,,,,267,,267,267,267,267,,,267,267,273,273,273,,273,,,,273,273', ',,,273,,273,273,273,273,273,273,273,,,,,,273,273,273,273,273,273,273', ',,273,,,,,,,273,,,273,273,273,273,273,273,273,273,273,273,273,273,,273', '273,,273,273,273,,,,,,,,,,,,,,,,,,,,273,,,273,,,273,273,,,273,,273,', '273,,273,,,,,,,,273,,,,,273,273,273,273,273,273,,,,273,273,,,,,,,273', ',273,273,273,273,,,273,273,276,276,276,,276,,,,276,276,,,,276,,276,276', '276,276,276,276,276,,,,,,276,276,276,276,276,276,276,,,276,,,,,,,276', ',,276,276,276,276,276,276,276,276,276,276,276,276,,276,276,,276,276', '276,,,,,,,,,,,,,,,,,,,,276,,,276,,,276,276,,,276,,276,,276,,276,,,,', ',,,276,,,,,276,276,276,276,276,276,,,,276,276,276,,,,,,276,,276,276', '276,276,,,276,276,245,245,245,,245,,,,245,245,,,,245,,245,245,245,245', '245,245,245,,,,,,245,245,245,245,245,245,245,,,245,,,,,,,245,,,245,245', '245,245,245,245,245,245,,245,245,245,,245,245,,245,245,245,,,,,,,,,', ',,,,,,,,,,245,,,245,,,245,245,,,245,,,,,,245,,,,,,,,245,,,,,245,245', '245,245,245,245,,,,245,245,,,,,,,245,,,245,245,245,,,245,245,801,801', '801,,801,,,,801,801,,,,801,,801,801,801,801,801,801,801,,,,,,801,801', '801,801,801,801,801,,,801,,,,,,,801,,,801,801,801,801,801,801,801,801', ',801,801,801,,801,801,,,,801,,,,,,,,,,,,,,,,,,,,801,,,801,,,801,801', ',,801,,,,,,,,,,,,,,,,,,,801,801,801,801,801,801,,,,801,801,,,,,,,801', ',,801,801,801,,,801,801,32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32', '32,32,,,,,,32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32', '32,32,32,32,32,,32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,', ',32,,32,,32,,32,,,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32', '32,32,32,,,32,32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,', ',,,,33,33,33,33,33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33', '33,33,33,,33,33,,33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33', ',33,,33,,,,,,,,33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33', '33,,,33,33,283,283,283,,283,,,,283,283,,,,283,,283,283,283,283,283,283', '283,,,,,,283,283,283,283,283,283,283,,,283,,,,,,,283,,,283,283,283,283', '283,283,283,283,,283,283,283,,283,283,,283,283,283,,,,,,,,,,,,,,,,,', ',,283,,,283,,,283,283,,,283,,,,,,283,,,,,,,,283,,,,,283,283,283,283', '283,283,,,,283,283,,,,,,,283,,,283,283,283,,,283,283,23,23,23,,23,,', ',23,23,,,,23,,23,23,23,23,23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,', ',,,,23,,,23,23,23,23,23,23,23,23,,23,23,23,,23,23,,23,23,23,,,,,,,,', ',,,,,,,,,,,23,,,23,,,23,23,,,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23,23', '23,,,,23,23,,,,,,,23,,,23,23,23,,,23,23,514,514,514,,514,,,,514,514', ',,,514,,514,514,514,514,514,514,514,,,,,,514,514,514,514,514,514,514', ',,514,,,,,,,514,,,514,514,514,514,514,514,514,514,,514,514,514,,514', '514,,,,514,,,,,,,,,,,,,,,,,,,,514,,,514,,,514,514,,,514,,,,,,,,,,,,', ',,,,,,514,514,514,514,514,514,,,,514,514,,,,,,,514,,,514,514,514,,,514', '514,342,342,342,,342,,,,342,342,,,,342,,342,342,342,342,342,342,342', ',,,,,342,342,342,342,342,342,342,,,342,,,,,,,342,,,342,342,342,342,342', '342,342,342,,342,342,342,,342,342,,342,342,342,,,,,,,,,,,,,,,,,,,,342', ',,342,,,342,342,,,342,,,,,,342,,,,,,,,342,,,,,342,342,342,342,342,342', ',,,342,342,,,,,,,342,,,342,342,342,,,342,342,123,123,123,123,123,,,', '123,123,,,,123,,123,123,123,123,123,123,123,,,,,,123,123,123,123,123', '123,123,,,123,,,,,,123,123,,123,123,123,123,123,123,123,123,123,,123', '123,123,,123,123,,123,123,123,,,,,,,,,,,,,,,,,,,,123,,,123,,,123,123', ',,123,,123,,,,123,,,,,,,,123,,,,,123,123,123,123,123,123,,,,123,123', ',,,,,,123,,,123,123,123,,,123,123,507,507,507,507,507,,,,507,507,,,', '507,,507,507,507,507,507,507,507,,,,,,507,507,507,507,507,507,507,,', '507,,,,,,507,507,,507,507,507,507,507,507,507,507,507,,507,507,507,', '507,507,,507,507,507,,,,,,,,,,,,,,,,,,,,507,,,507,,,507,507,,,507,,507', ',,,507,,,,,,,,507,,,,,507,507,507,507,507,507,,,,507,507,,,,,,507,507', ',,507,507,507,,,507,507,1007,1007,1007,,1007,,,,1007,1007,,,,1007,,1007', '1007,1007,1007,1007,1007,1007,,,,,,1007,1007,1007,1007,1007,1007,1007', ',,1007,,,,,,,1007,,,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007', '1007,1007,,1007,1007,,1007,1007,1007,,,,,,,,,,,,,,,,,,,,1007,,,1007', ',,1007,1007,,,1007,,1007,,1007,,1007,,,,,,,,1007,,,,,1007,1007,1007', '1007,1007,1007,,,,1007,1007,,,,,,,1007,,1007,1007,1007,1007,,,1007,1007', '504,504,504,,504,,,,504,504,,,,504,,504,504,504,504,504,504,504,,,,', ',504,504,504,504,504,504,504,,,504,,,,,,,504,,,504,504,504,504,504,504', '504,504,,504,504,504,,504,504,,504,504,504,,,,,,,,,,,,,,,,,,,,504,,', '504,,,504,504,,,504,,,,,,504,,,,,,,,504,,,,,504,504,504,504,504,504', ',,,504,504,,,,,,,504,,,504,504,504,,,504,504,502,502,502,,502,,,,502', '502,,,,502,,502,502,502,502,502,502,502,,,,,,502,502,502,502,502,502', '502,,,502,,,,,,,502,,,502,502,502,502,502,502,502,502,,502,502,502,', '502,502,,502,502,502,,,,,,,,,,,,,,,,,,,,502,,,502,,,502,502,,,502,,', ',,,502,,,,,,,,502,,,,,502,502,502,502,502,502,,,,502,502,,,,,,,502,', ',502,502,502,,,502,502,500,500,500,,500,,,,500,500,,,,500,,500,500,500', '500,500,500,500,,,,,,500,500,500,500,500,500,500,,,500,,,,,,,500,,,500', '500,500,500,500,500,500,500,500,500,500,500,,500,500,,500,500,500,,', ',,,,,,,,,,,,,,,,,500,,,500,,,500,500,,,500,,,,500,,500,,,,,,,,500,,', ',,500,500,500,500,500,500,,,,500,500,,,,,,,500,,500,500,500,500,,,500', '500,497,497,497,,497,,,,497,497,,,,497,,497,497,497,497,497,497,497', ',,,,,497,497,497,497,497,497,497,,,497,,,,,,,497,,,497,497,497,497,497', '497,497,497,497,497,497,497,,497,497,,497,497,497,,,,,,,,,,,,,,,,,,', ',497,,,497,,,497,497,,,497,,497,,497,,497,,,,,,,,497,,,,,497,497,497', '497,497,497,,,,497,497,,,,,,,497,,497,497,497,497,,,497,497,122,122', '122,,122,,,,122,122,,,,122,,122,122,122,122,122,122,122,,,,,,122,122', '122,122,122,122,122,,,122,,,,,,,122,,,122,122,122,122,122,122,122,122', ',122,122,122,,122,122,,122,122,122,,,,,,,,,,,,,,,,,,,,122,,,122,,,122', '122,,,122,,,,,,122,,,,,,,,122,,,,,122,122,122,122,122,122,,,,122,122', ',,,,,,122,,,122,122,122,,,122,122,62,62,62,,62,,,,62,62,,,,62,,62,62', '62,62,62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,,62,,,62,62,62,62', '62,62,62,62,62,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,,,,,,,,62,,,62', ',,62,62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62,,,,62,62,,,,', ',,62,,62,62,62,62,,,62,62,121,121,121,,121,,,,121,121,,,,121,,121,121', '121,121,121,121,121,,,,,,121,121,121,121,121,121,121,,,121,,,,,,,121', ',,121,121,121,121,121,121,121,121,,121,121,121,,121,121,,121,121,121', ',,,,,,,,,,,,,,,,,,,121,,,121,,,121,121,,,121,,,,,,121,,,,,,,,121,,,', ',121,121,121,121,121,121,,,,121,121,,,,,,,121,,,121,121,121,,,121,121', '734,734,734,,734,,,,734,734,,,,734,,734,734,734,734,734,734,734,,,,', ',734,734,734,734,734,734,734,,,734,,,,,,,734,,,734,734,734,734,734,734', '734,734,,734,734,734,,734,734,,734,734,734,,,,,,,,,,,,,,,,,,,,734,,', '734,,,734,734,,,734,,734,,,,734,,,,,,,,734,,,,,734,734,734,734,734,734', ',,,734,734,,,,,,,734,,,734,734,734,,,734,734,255,255,255,,255,,,,255', '255,,,,255,,255,255,255,255,255,255,255,,,,,,255,255,255,255,255,255', '255,,,255,,,,,,,255,,,255,255,255,255,255,255,255,255,,255,255,255,', '255,255,,255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255,,,255,255,,,255,,', ',,,255,,,,,,,,255,,,,,255,255,255,255,255,255,,,,255,255,,,,,,,255,', ',255,255,255,,,255,255,120,120,120,,120,,,,120,120,,,,120,,120,120,120', '120,120,120,120,,,,,,120,120,120,120,120,120,120,,,120,,,,,,,120,,,120', '120,120,120,120,120,120,120,,120,120,120,,120,120,,120,120,120,,,,,', ',,,,,,,,,,,,,,120,,,120,,,120,120,,,120,,,,,,120,,,,,,,,120,,,,,120', '120,120,120,120,120,,,,120,120,,,,,,,120,,,120,120,120,,,120,120,746', '746,746,,746,,,,746,746,,,,746,,746,746,746,746,746,746,746,,,,,,746', '746,746,746,746,746,746,,,746,,,,,,,746,,,746,746,746,746,746,746,746', '746,746,746,746,746,,746,746,,746,746,746,,,,,,,,,,,,,,,,,,,,746,,,746', ',,746,746,,,746,,746,,746,,746,,,,,,,,746,,,,,746,746,746,746,746,746', ',,,746,746,,,,,,,746,,746,746,746,746,,,746,746,66,66,66,,66,,,,66,66', ',,,66,,66,66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,,66', ',,66,66,66,66,66,66,66,66,,66,66,66,,66,66,,66,66,66,,,,,,,,,,,,,,,', ',,,,66,,,66,,,66,66,,,66,,,,,,66,,,,,,,,66,,,,,66,66,66,66,66,66,,,', '66,66,,,,,,,66,,,66,66,66,,,66,66,354,354,354,,354,,,,354,354,,,,354', ',354,354,354,354,354,354,354,,,,,,354,354,354,354,354,354,354,,,354', ',,,,,,354,,,354,354,354,354,354,354,354,354,,354,354,354,,354,354,,', ',354,,,,,,,,,,,,,,,,,,,,354,,,354,,,354,354,,,354,,,,,,,,,,,,,,,,,,', '354,354,354,354,354,354,,,,354,354,,,,,,,354,,,354,354,354,,,354,354', '356,356,356,,356,,,,356,356,,,,356,,356,356,356,356,356,356,356,,,,', ',356,356,356,356,356,356,356,,,356,,,,,,,356,,,356,356,356,356,356,356', '356,356,,356,356,356,,356,356,,,,356,,,,,,,,,,,,,,,,,,,,356,,,356,,', '356,356,,,356,,,,,,,,,,,,,,,,,,,356,356,356,356,356,356,,,,356,356,', ',,,,,356,,,356,356,356,,,356,356,119,119,119,,119,,,,119,119,,,,119', ',119,119,119,119,119,119,119,,,,,,119,119,119,119,119,119,119,,,119', ',,,,,,119,,,119,119,119,119,119,119,119,119,,119,119,119,,119,119,,119', '119,119,,,,,,,,,,,,,,,,,,,,119,,,119,,,119,119,,,119,,,,,,119,,,,,,', ',119,,,,,119,119,119,119,119,119,,,,119,119,,,,,,,119,,,119,119,119', ',,119,119,114,114,114,114,114,,,,114,114,,,,114,,114,114,114,114,114', '114,114,,,,,,114,114,114,114,114,114,114,,,114,,,,,,114,114,114,114', '114,114,114,114,114,114,114,114,,114,114,114,,114,114,,114,114,114,', ',,,,,,,,,,,,,,,,,,114,,,114,,,114,114,,,114,,114,,,,114,,,,,,,,114,', ',,,114,114,114,114,114,114,,,,114,114,,,,,,114,114,,,114,114,114,,,114', '114,456,456,456,,456,,,,456,456,,,,456,,456,456,456,456,456,456,456', ',,,,,456,456,456,456,456,456,456,,,456,,,,,,,456,,,456,456,456,456,456', '456,456,456,,456,456,456,,456,456,,456,456,456,,,,,,,,,,,,,,,,,,,,456', ',,456,,,456,456,,,456,,,,,,456,,,,,,,,456,,,,,456,456,456,456,456,456', ',,,456,456,,,,,,,456,,,456,456,456,,,456,456,455,455,455,,455,,,,455', '455,,,,455,,455,455,455,455,455,455,455,,,,,,455,455,455,455,455,455', '455,,,455,,,,,,,455,,,455,455,455,455,455,455,455,455,,455,455,455,', '455,455,,455,455,455,,,,,,,,,,,,,,,,,,,,455,,,455,,,455,455,,,455,,', ',,,455,,,,,,,,455,,,,,455,455,455,455,455,455,,,,455,455,,,,,,,455,', ',455,455,455,,,455,455,454,454,454,,454,,,,454,454,,,,454,,454,454,454', '454,454,454,454,,,,,,454,454,454,454,454,454,454,,,454,,,,,,,454,,,454', '454,454,454,454,454,454,454,,454,454,454,,454,454,,454,454,454,,,,,', ',,,,,,,,,,,,,,454,,,454,,,454,454,,,454,,,,,,454,,,,,,,,454,,,,,454', '454,454,454,454,454,,,,454,454,,,,,,,454,,,454,454,454,,,454,454,452', '452,452,,452,,,,452,452,,,,452,,452,452,452,452,452,452,452,,,,,,452', '452,452,452,452,452,452,,,452,,,,,,,452,,,452,452,452,452,452,452,452', '452,452,452,452,452,,452,452,,452,452,452,,,,,,,,,,,,,,,,,,,,452,,,452', ',,452,452,,,452,,452,,452,,452,,,,,,,,452,,,,,452,452,452,452,452,452', ',,,452,452,,,,,,,452,,452,452,452,452,,,452,452,325,325,325,,325,,,', '325,325,,,,325,,325,325,325,325,325,325,325,,,,,,325,325,325,325,325', '325,325,,,325,,,,,,,325,,,325,325,325,325,325,325,325,325,,325,325,325', ',325,325,,325,325,325,,,,,,,,,,,,,,,,,,,,325,,,325,325,,325,325,,,325', ',,,,,325,,,,,,,,325,,,,,325,325,325,325,325,325,,,,325,325,,,,,,,325', ',,325,325,325,,,325,325,328,328,328,,328,,,,328,328,,,,328,,328,328', '328,328,328,328,328,,,,,,328,328,328,328,328,328,328,,,328,,,,,,,328', ',,328,328,328,328,328,328,328,328,,328,328,328,,328,328,,328,328,328', ',,,,,,,,,,,,,,,,,,,328,,,328,,,328,328,,,328,,,,,,328,,,,,,,,328,,,', ',328,328,328,328,328,328,,,,328,328,,,,,,,328,,,328,328,328,,,328,328', '565,565,565,,565,,,,565,565,,,,565,,565,565,565,565,565,565,565,,,,', ',565,565,565,565,565,565,565,,,565,,,,,,,565,,,565,565,565,565,565,565', '565,565,,565,565,565,,565,565,,565,565,565,,,,,,,,,,,,,,,,,,,,565,,', '565,,,565,565,,,565,,,,,,565,,,,,,,,565,,,,,565,565,565,565,565,565', ',,,565,565,,,,,,,565,,,565,565,565,,,565,565,221,221,221,,221,,,,221', '221,,,,221,,221,221,221,221,221,221,221,,,,,,221,221,221,221,221,221', '221,,,221,,,,,,,221,,,221,221,221,221,221,221,221,221,,221,221,221,', '221,221,,221,221,221,,,,,,,,,,,,,,,,,,,,221,,,221,,,221,221,,,221,,', ',,,221,,,,,,,,221,,,,,221,221,221,221,221,221,,,,221,221,221,,,,,,221', ',,221,221,221,,,221,221,220,220,220,,220,,,,220,220,,,,220,,220,220', '220,220,220,220,220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220', ',,220,220,220,220,220,220,220,220,,220,220,220,,220,220,,220,220,220', ',,,,,,,,,,,,,,,,,,,220,,,220,,,220,220,,,220,,,,,,220,,,,,,,,220,,,', ',220,220,220,220,220,220,,,,220,220,,,,,,,220,,,220,220,220,,,220,220', '219,219,219,,219,,,,219,219,,,,219,,219,219,219,219,219,219,219,,,,', ',219,219,219,219,219,219,219,,,219,,,,,,,219,,,219,219,219,219,219,219', '219,219,,219,219,219,,219,219,,219,219,219,,,,,,,,,,,,,,,,,,,,219,,', '219,,,219,219,,,219,,,,,,219,,,,,,,,219,,,,,219,219,219,219,219,219', ',,,219,219,,,,,,,219,,,219,219,219,,,219,219,218,218,218,,218,,,,218', '218,,,,218,,218,218,218,218,218,218,218,,,,,,218,218,218,218,218,218', '218,,,218,,,,,,,218,,,218,218,218,218,218,218,218,218,,218,218,218,', '218,218,,218,218,218,,,,,,,,,,,,,,,,,,,,218,,,218,,,218,218,,,218,,', ',,,218,,,,,,,,218,,,,,218,218,218,218,218,218,,,,218,218,,,,,,,218,', ',218,218,218,,,218,218,217,217,217,,217,,,,217,217,,,,217,,217,217,217', '217,217,217,217,,,,,,217,217,217,217,217,217,217,,,217,,,,,,,217,,,217', '217,217,217,217,217,217,217,,217,217,217,,217,217,,217,217,217,,,,,', ',,,,,,,,,,,,,,217,,,217,,,217,217,,,217,,217,,,,217,,,,,,,,217,,,,,217', '217,217,217,217,217,,,,217,217,,,,,,,217,,,217,217,217,,,217,217,216', '216,216,,216,,,,216,216,,,,216,,216,216,216,216,216,216,216,,,,,,216', '216,216,216,216,216,216,,,216,,,,,,,216,,,216,216,216,216,216,216,216', '216,,216,216,216,,216,216,,216,216,216,,,,,,,,,,,,,,,,,,,,216,,,216', ',,216,216,,,216,,,,,,216,,,,,,,,216,,,,,216,216,216,216,216,216,,,,216', '216,,,,,,,216,,,216,216,216,,,216,216,539,539,539,,539,,,,539,539,,', ',539,,539,539,539,539,539,539,539,,,,,,539,539,539,539,539,539,539,', ',539,,,,,,,539,,,539,539,539,539,539,539,539,539,539,539,539,539,,539', '539,,539,539,539,,,,,,,,,,,,,,,,,,,,539,,,539,,,539,539,,,539,,,,,,539', ',,,,,,,539,,,,,539,539,539,539,539,539,,,,539,539,,,,,,,539,,539,539', '539,539,,,539,539,536,536,536,,536,,,,536,536,,,,536,,536,536,536,536', '536,536,536,,,,,,536,536,536,536,536,536,536,,,536,,,,,,,536,,,536,536', '536,536,536,536,536,536,536,536,536,536,,536,536,,536,536,536,,,,,,', ',,,,,,,,,,,,,536,,,536,,,536,536,,,536,,536,,,,536,,,,,,,,536,,,,,536', '536,536,536,536,536,,,,536,536,,,,,,,536,,536,536,536,536,,,536,536', '212,212,212,,212,,,,212,212,,,,212,,212,212,212,212,212,212,212,,,,', ',212,212,212,212,212,212,212,,,212,,,,,,,212,,,212,212,212,212,212,212', '212,212,212,212,212,212,,212,212,,212,212,212,,,,,,,,,,,,,,,,,,,,212', ',,212,,,212,212,,,212,,212,,212,,212,,,,,,,,212,,,,,212,212,212,212', '212,212,,,,212,212,,,,,,,212,,212,212,212,212,,,212,212,334,334,334', ',334,,,,334,334,,,,334,,334,334,334,334,334,334,334,,,,,,334,334,334', '334,334,334,334,,,334,,,,,,,334,,,334,334,334,334,334,334,334,334,334', '334,334,334,,334,334,,334,334,334,,,,,,,,,,,,,,,,,,,,334,,,334,,,334', '334,,,334,,,,,,334,,,,,,,,334,,,,,334,334,334,334,334,334,,,,334,334', ',,,,,,334,,334,334,334,334,,,334,334,211,211,211,,211,,,,211,211,,,', '211,,211,211,211,211,211,211,211,,,,,,211,211,211,211,211,211,211,,', '211,,,,,,,211,,,211,211,211,211,211,211,211,211,,211,211,211,,211,211', ',211,211,211,,,,,,,,,,,,,,,,,,,,211,,,211,,,211,211,,,211,,,,,,211,', ',,,,,,211,,,,,211,211,211,211,211,211,,,,211,211,,,,,,,211,,,211,211', '211,,,211,211,530,530,530,,530,,,,530,530,,,,530,,530,530,530,530,530', '530,530,,,,,,530,530,530,530,530,530,530,,,530,,,,,,,530,,,530,530,530', '530,530,530,530,530,,530,530,530,,530,530,,530,530,530,,,,,,,,,,,,,', ',,,,,,530,,,530,,,530,530,,,530,,,,,,530,,,,,,,,530,,,,,530,530,530', '530,530,530,,,,530,530,,,,,,,530,,,530,530,530,,,530,530,526,526,526', ',526,,,,526,526,,,,526,,526,526,526,526,526,526,526,,,,,,526,526,526', '526,526,526,526,,,526,,,,,,,526,,,526,526,526,526,526,526,526,526,,526', '526,526,,526,526,,526,526,526,,,,,,,,,,,,,,,,,,,,526,,,526,,,526,526', ',,526,,,,,,526,,,,,,,,526,,,,,526,526,526,526,526,526,,,,526,526,,,', ',,,526,,,526,526,526,,,526,526,341,341,341,,341,,,,341,341,,,,341,,341', '341,341,341,341,341,341,,,,,,341,341,341,341,341,341,341,,,341,,,,,', ',341,,,341,341,341,341,341,341,341,341,,341,341,341,,341,341,,341,341', '341,,,,,,,,,,,,,,,,,,,,341,,,341,,,341,341,,,341,,,,,,341,,,,,,,,341', ',,,,341,341,341,341,341,341,,,,341,341,,,,,,,341,,,341,341,341,,,341', '341,525,525,525,,525,,,,525,525,,,,525,,525,525,525,525,525,525,525', ',,,,,525,525,525,525,525,525,525,,,525,,,,,,,525,,,525,525,525,525,525', '525,525,525,,525,525,525,,525,525,,525,525,525,,,,,,,,,,,,,,,,,,,,525', ',,525,,,525,525,,,525,,,,,,525,,,,,,,,525,,,,,525,525,525,525,525,525', ',,,525,525,,,,,,,525,,,525,525,525,,,525,525,210,210,210,,210,,,,210', '210,,,,210,,210,210,210,210,210,210,210,,,,,,210,210,210,210,210,210', '210,,,210,,,,,,,210,,,210,210,210,210,210,210,210,210,,210,210,210,', '210,210,,210,210,210,,,,,,,,,,,,,,,,,,,,210,,,210,,,210,210,,,210,,210', ',,,210,,,,,,,,210,,,,,210,210,210,210,210,210,,,,210,210,,,,,,,210,', ',210,210,210,,,210,210,522,522,522,,522,,,,522,522,,,,522,,522,522,522', '522,522,522,522,,,,,,522,522,522,522,522,522,522,,,522,,,,,,,522,,,522', '522,522,522,522,522,522,522,,522,522,522,,522,522,,,,522,,,,,,,,,,,', ',,,,,,,,522,,,522,,,522,522,,,522,,,,,,,,,,,,,,,,,,,522,522,522,522', '522,522,,,,522,522,,,,,,,522,,,522,522,522,,,522,522,516,516,516,,516', ',,,516,516,,,,516,,516,516,516,516,516,516,516,,,,,,516,516,516,516', '516,516,516,,,516,,,,,,,516,,,516,516,516,516,516,516,516,516,516,516', '516,516,,516,516,,516,516,516,,,,,,,,,,,,,,,,,,,,516,,,516,,,516,516', ',,516,,516,,516,,516,,,,,,,,516,,,,,516,516,516,516,516,516,,,,516,516', ',,,,,,516,,516,516,516,516,436,,516,516,,,,436,436,436,,,436,436,436', '712,436,712,712,712,712,712,,,,436,436,436,436,,,712,,,,,436,436,,436', '436,436,436,436,,,,,,,,,,712,,,,,,,,,,,712,712,,436,436,436,436,436', '436,436,436,436,436,436,436,436,436,,,436,436,436,,,436,,,436,,,436', '436,,436,712,436,,436,,436,436,436,436,436,436,436,,436,436,436,,,,', ',,,,,,,,436,436,436,436,435,436,,436,,,,435,435,435,,,435,435,435,710', '435,710,710,710,710,710,,,,435,435,435,435,,,710,,,,,435,435,,435,435', '435,435,435,,,,,,,,,,710,,,,,,,,,710,710,710,710,,435,435,435,435,435', '435,435,435,435,435,435,435,435,435,,,435,435,435,,,435,,,435,,,435', '435,,435,710,435,,435,,435,435,435,435,435,435,435,,435,435,435,,,,', ',,,,,,,,435,435,435,435,59,435,,435,,,,59,59,59,,,59,59,59,708,59,708', '708,708,708,708,,,,,59,59,59,,,708,,,,,59,59,,59,59,59,59,59,,,,,,,', ',,708,,,,,,,,,708,708,708,708,,59,59,59,59,59,59,59,59,59,59,59,59,59', '59,,,59,59,59,,,59,,,59,,,59,59,,59,708,59,,59,,59,59,59,59,59,59,59', ',59,,59,,,,,,,,,,,,,59,59,59,59,,59,,59,12,12,12,12,12,12,12,12,12,12', '12,12,12,12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12,12,12', '12,12,,,,,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12,12,12', '12,12,12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12,12,12', '12,12,12,12,12,,,12,12,,,,,,,,,,12,,,,,,,,,12,628,628,628,628,628,628', '628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628', '628,,,,628,628,628,628,628,628,628,628,628,628,,,,,,628,628,628,628', '628,628,628,628,628,,,628,,,,,,,,,628,628,,628,628,628,628,628,628,628', ',,628,628,,,,628,628,628,628,,,,,,,,,,,,,,628,628,,628,628,628,628,628', '628,628,628,628,628,628,,,628,628,,,,,,,,,,628,,,,,,,,,628,756,756,756', '756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756', '756,756,756,756,,,,756,756,756,756,756,756,756,756,756,756,,,,,,756', '756,756,756,756,756,756,756,756,,,756,,,,,,,,,756,756,,756,756,756,756', '756,756,756,,,756,756,,,,756,756,756,756,,,,,,,,,,,,,,756,756,,756,756', '756,756,756,756,756,756,756,756,756,,,756,,,,,,,,,,,,,,,,,,,,756,405', '405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405', '405,405,405,405,405,405,,,,405,405,405,405,405,405,405,405,405,405,', ',,,,405,405,405,405,405,405,405,405,405,,,405,,,,,,,,,405,405,,405,405', '405,405,405,405,405,,,405,405,,,,405,405,405,405,,,,,,,,,,,,,,405,405', ',405,405,405,405,405,405,405,405,405,405,405,,,405,405,,,,,,,,,,405', ',,,,,,,,405,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91', '91,91,91,91,91,,,,91,91,91,91,91,91,91,91,91,91,,,,,,91,91,91,91,91', '91,91,91,91,91,91,91,,91,,,,,,,91,91,,91,91,91,91,91,91,91,,,91,91,', ',,91,91,91,91,,,,,,,,,,,,,,91,91,,91,91,91,91,91,91,91,91,91,91,91,', ',91,,,,,,,,,,,,,,,,,,,,91,11,11,11,11,11,11,11,11,11,11,11,11,11,11', '11,11,11,11,11,11,11,11,11,11,,,,11,11,11,11,11,11,11,11,11,11,,,,,', '11,11,11,11,11,11,11,11,11,11,,11,,,,,,,,,11,11,,11,11,11,11,11,11,11', ',,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11', '11,11,,,11,11,,,,,,,,,,11,,,,,,,,,11,74,74,74,74,74,74,74,74,74,74,74', '74,74,74,74,74,74,74,74,74,74,74,74,74,,,,74,74,74,74,74,74,74,74,74', '74,,,,,,74,74,74,74,74,74,74,74,74,74,74,74,,74,,,,,,,74,74,,74,74,74', '74,74,74,74,,,74,74,,,,74,74,74,74,,,,,,74,,,,,,,,74,74,,74,74,74,74', '74,74,74,74,74,74,74,30,,74,,,,,30,30,30,,,30,30,30,1042,30,1042,1042', '1042,1042,1042,74,,,30,30,30,,,,1042,,,,,30,30,,30,30,30,30,30,,,,,', ',,,,1042,,,,,,,,,,,1042,1042,,30,30,30,30,30,30,30,30,30,30,30,30,30', '30,,,30,30,30,,,30,,30,30,,,30,30,,30,1042,30,,30,,30,30,30,30,30,30', '30,,30,30,30,,,,,,,,,,,,31,30,30,,30,,30,31,31,31,,,31,31,31,942,31', '942,942,942,942,942,,,,,31,31,,,,942,,,,,31,31,,31,31,31,31,31,,,,,', ',,,,942,942,,,,,,,,942,942,942,942,,31,31,31,31,31,31,31,31,31,31,31', '31,31,31,,,31,31,31,,,31,,31,31,,,31,31,,31,942,31,,31,,31,31,31,31', '31,31,31,,31,,31,,,,,,,,,,,,484,31,31,,31,,31,484,484,484,,,484,484', '484,546,484,546,546,546,546,546,,,,484,484,,,,,546,,,,,484,484,,484', '484,484,484,484,,,,,,,,,,546,,,,,,,,,546,546,546,546,,426,,,,,,,426', '426,426,,484,426,426,426,,426,,484,,,,,484,484,426,426,426,,,,546,,', ',,426,426,,426,426,426,426,426,,484,484,,,,,,,,,,,,,484,,,,,484,,,426', '426,426,426,426,426,426,426,426,426,426,426,426,426,,,426,426,426,,', '426,,426,426,,,426,426,,426,,426,,426,,426,426,426,426,426,426,426,', '426,426,426,,,,,,517,517,,,517,,,426,426,,426,,426,517,517,,517,517', '517,517,517,517,517,,,517,517,,,,517,517,517,517,,,,,,517,,,,,,,,517', '517,,517,517,517,517,517,517,517,517,517,517,517,,,517,,,,,518,518,', ',518,,,,,,,,,518,518,517,518,518,518,518,518,518,518,,,518,518,,,,518', '518,518,518,,,,,,518,,,,,,,,518,518,,518,518,518,518,518,518,518,518', '518,518,518,,,518,,,,,450,450,,,450,,,,,,,,,450,450,518,450,450,450', '450,450,450,450,,,450,450,,,,450,450,450,450,,,,,,450,,,,,,,,450,450', ',450,450,450,450,450,450,450,450,450,450,450,,,450,,,,,451,451,,,451', ',,,,,,,,451,451,450,451,451,451,451,451,451,451,,,451,451,,,,451,451', '451,451,,,,,,451,,,,,,,,451,451,,451,451,451,451,451,451,451,451,451', '451,451,,,451,,,,,263,263,,,263,,,,,,,,,263,263,451,263,263,263,263', '263,263,263,,,263,263,,,,263,263,263,263,,,,,,,,,,,,,,263,263,,263,263', '263,263,263,263,263,263,263,263,263,,,263,,,,,744,744,,,744,,,,,,,,', '744,744,263,744,744,744,744,744,744,744,,,744,744,,,,744,744,744,744', ',,,,,744,,,,,,,,744,744,,744,744,744,744,744,744,744,744,744,744,744', ',,744,,,,,745,745,,,745,,,,,,,,,745,745,744,745,745,745,745,745,745', '745,,,745,745,,,,745,745,745,745,,,,,,745,,,,,,,,745,745,,745,745,745', '745,745,745,745,745,745,745,745,,,745,,,,,959,959,,,959,,,,,,,,,959', '959,745,959,959,959,959,959,959,959,,,959,959,,,,959,959,959,959,,,', ',,959,,,,,,,,959,959,,959,959,959,959,959,959,959,959,959,959,959,,1011', '959,1011,1011,1011,1011,1011,,,214,214,,,214,,,1011,,,,,959,214,214', ',214,214,214,214,214,214,214,,,214,214,,,1011,214,214,214,214,,,,,,214', '1011,1011,,,,,,214,214,,214,214,214,214,214,214,214,214,214,214,214', ',,214,,,,,1009,1009,,,1009,,1011,,,,,,,1009,1009,214,1009,1009,1009', '1009,1009,1009,1009,,,1009,1009,,,,1009,1009,1009,1009,,,,,,1009,,,', ',,,,1009,1009,,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009,1009', ',,1009,,,,,1008,1008,,,1008,,,,,,,,,1008,1008,1009,1008,1008,1008,1008', '1008,1008,1008,,,1008,1008,,,,1008,1008,1008,1008,,,,,,1008,,,,,,,,1008', '1008,,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,,,1008', ',,,,213,213,,,213,,,,,,,,,213,213,1008,213,213,213,213,213,213,213,', ',213,213,,,,213,213,213,213,,,,,,213,,,,,,,,213,213,,213,213,213,213', '213,213,213,213,213,213,213,,337,213,337,337,337,337,337,,,,,,,,,,337', ',,,,213,,,,,,,,,,,,,,,,,337,337,528,528,,,528,,,337,337,337,337,,,528', '528,,528,528,528,528,528,528,528,,,528,528,,,,528,528,528,528,,,,,,528', ',,,337,,,,528,528,,528,528,528,528,528,528,528,528,528,528,528,,,528', ',,,,527,527,,,527,,,,,,,,,527,527,528,527,527,527,527,527,527,527,,', '527,527,,,,527,527,527,527,,,,,,527,,,,,,,,527,527,,527,527,527,527', '527,527,527,527,527,527,527,,992,527,992,992,992,992,992,994,,994,994', '994,994,994,,,992,,,,,527,,994,996,,996,996,996,996,996,,,,,,,,992,', '996,,,,,994,,992,992,992,992,,,,,,994,994,,,,659,996,659,659,659,659', '659,,,,,,996,996,,885,659,885,885,885,885,885,992,,,,,,,994,,885,,,', ',,,659,888,,888,888,888,888,888,996,659,659,659,659,,,885,890,888,890', '890,890,890,890,,885,885,885,885,,,,,890,,,,,659,,888,,,,,,659,,,888', '888,888,888,,913,890,913,913,913,913,913,885,,,,,890,890,,,913,915,', '915,915,915,915,915,917,,917,917,917,917,917,888,,915,,,,,913,,917,', ',,,,890,913,913,913,913,,,,919,915,919,919,919,919,919,,917,,,,915,915', ',,919,,,917,917,600,,600,600,600,600,600,,913,,,,,,,,600,919,,,,,,,', '915,,,919,919,,,917,,,,,,600,600,,,,,,,,600,600,600,600,,,,588,588,', ',588,,,,919,,,,,588,588,,588,588,588,588,588,588,588,,,588,588,,,600', '588,588,588,588,,,,,,588,,,,,,,,588,588,,588,588,588,588,588,588,588', '588,588,588,588,,,588,,,,,587,587,,,587,,,,,,,,,587,587,588,587,587', '587,587,587,587,587,,,587,587,,,,587,587,587,587,,,,,,587,,,,,,,,587', '587,,587,587,587,587,587,587,587,587,587,587,587,,,587,,,,,,,,,,,,,', ',,,,,,587' ] racc_action_check = arr = ::Array.new(26218, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_action_pointer = [ nil, 1328, 4443, 61, nil, 416, nil, nil, 12006, 1482, nil, 24121, 23456, -20, nil, -42, 81, 1272, 427, 46, 610, nil, -73, 16486, 1764, 185, nil, 604, nil, 20, 24366, 24491, 16066, 16206, 5006, nil, 918, 5706, 5846, nil, 89, 428, 389, 173, 164, 9766, 10046, 11026, 118, 780, nil, nil, nil, nil, nil, nil, nil, nil, nil, 23324, nil, -68, 18026, nil, -19, nil, 18866, 11586, nil, nil, 11726, 11866, 171, nil, 24254, nil, nil, nil, nil, nil, -86, nil, nil, nil, nil, nil, nil, 140, 159, 163, 217, 23988, nil, nil, nil, nil, nil, nil, 380, nil, nil, 512, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 19426, nil, nil, nil, nil, 19286, 18586, 18166, 17886, 16906, 239, nil, 253, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 236, nil, 4584, 22646, 21946, 21666, 25502, 25298, nil, 21246, 21106, 20966, 20826, 20686, 20546, nil, nil, 849, 194, 231, 314, 291, 235, 308, nil, 10466, 3456, 309, 9626, 8786, 8366, 7666, 7526, 7246, 7106, 6966, 5986, 5426, 15786, 15226, 14666, 13826, 13686, 11446, 12706, 12426, 12286, 12146, 18446, 6826, 12846, 13266, 14946, 15086, nil, nil, 25023, nil, nil, 306, 15366, nil, 323, nil, nil, nil, 15506, nil, nil, 15646, nil, 2187, nil, 314, 351, nil, 16346, 402, 5146, nil, 366, 5286, nil, nil, 259, nil, 1467, 5566, 359, 4866, 397, 436, 412, 6406, 1905, 1203, 1200, 1131, 507, 1103, nil, 474, 448, -14, nil, nil, nil, 503, 161, 473, 10886, nil, 429, 537, 962, nil, 541, nil, 20126, 3315, nil, 20266, 521, nil, 449, 507, 527, 21806, nil, nil, 25564, 13, 21, 23, 22366, 16766, 224, 608, 504, 22, 24, 921, 582, 30, 653, nil, nil, 19006, nil, 19146, 655, 615, 676, 681, 738, 201, 388, 549, 570, nil, 706, nil, nil, nil, nil, nil, 316, nil, 382, nil, 222, nil, 555, 249, nil, 556, -58, nil, 565, -41, nil, 567, 125, nil, 412, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1764, 23855, nil, nil, nil, nil, 578, nil, nil, 575, 13406, 578, nil, nil, 1059, 582, nil, nil, 581, 596, 124, 353, 24683, nil, nil, nil, 255, 130, 644, nil, nil, 23194, 23064, nil, 1341, nil, 594, nil, nil, 777, nil, nil, nil, nil, 141, nil, 24887, 24955, 19986, 328, 19846, 19706, 19566, 3597, 4725, 804, 945, 675, 677, 689, 701, 5286, 5426, 3197, 5146, 4584, 4443, 4302, 4020, 3738, 3456, 3315, 5006, 4866, 659, 462, 4161, 3879, 1482, -13, 24616, nil, nil, nil, nil, nil, nil, 118, -57, 643, 648, nil, nil, 17746, nil, nil, 17606, nil, 17466, nil, 17326, nil, nil, 17046, 1608, 659, 660, nil, nil, 661, 16626, 667, 22926, 24751, 24819, 1341, 743, nil, 22786, 708, nil, 22506, 22226, 25672, 25604, 1623, 22086, 833, 846, 632, nil, nil, 21526, nil, nil, 21386, nil, 746, nil, 283, 774, 28, 24580, nil, 735, 738, nil, 739, 743, 748, nil, nil, nil, nil, nil, nil, nil, 747, 648, nil, nil, 20406, nil, nil, nil, 839, nil, nil, nil, 840, nil, nil, 847, 4161, 887, nil, 777, 60, 63, 884, 896, nil, 11306, 26083, 26015, 35, nil, 225, 263, -4, nil, 1059, nil, 9, 10746, nil, 25961, nil, 10606, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 186, nil, nil, 130, nil, nil, nil, 780, nil, nil, 781, nil, 802, nil, 23589, nil, 787, 10326, 9906, 430, 830, 9486, 9206, 9066, 8926, 829, nil, nil, nil, 8646, 8506, 833, nil, 7946, 7806, nil, 171, 105, 0, 644, 805, 918, 804, nil, nil, 25795, nil, nil, 915, -10, -43, nil, nil, nil, nil, 815, nil, 857, 6266, nil, nil, nil, 762, -108, 6126, 817, nil, 828, 158, 90, 865, 320, 1244, 867, 829, 13966, 2469, 892, 139, 946, 13546, nil, 838, 447, nil, nil, nil, 4725, 3033, 848, 335, nil, nil, 220, 23288, nil, 23158, nil, 23028, nil, 12566, nil, 608, nil, 849, 223, 855, nil, nil, nil, nil, 653, nil, 982, nil, nil, nil, nil, 991, nil, 18306, 877, 36, -4, 31, 66, 6686, nil, 990, nil, 25091, 25159, 18726, nil, nil, nil, 114, 425, 3738, 1200, 575, 315, 23722, 147, 760, 3597, nil, nil, nil, nil, nil, nil, nil, 876, 12986, 3033, 13126, nil, 879, nil, 2892, nil, 2751, nil, nil, 2610, nil, 1200, nil, 2328, 14106, 14246, 14386, 14526, 133, 14806, 880, 884, nil, 889, 901, 902, nil, 923, 913, 910, 904, 15926, nil, nil, 1341, nil, nil, nil, 1482, 1623, nil, nil, 922, 205, nil, nil, 1044, nil, 3174, 928, 978, nil, nil, nil, nil, 954, 1062, 946, 944, nil, nil, nil, 954, 956, nil, 957, 958, nil, 966, nil, nil, 970, 3160, 969, 3190, nil, 1090, nil, 6546, 1091, 2046, 2187, nil, 19, 5, 31, 289, 1236, nil, 975, 3879, 7386, nil, 419, 1096, 1106, 993, nil, nil, nil, nil, nil, nil, nil, nil, 1009, 1012, nil, 2046, 8086, 8226, 1905, 344, nil, nil, 25810, nil, nil, 25834, nil, 25849, nil, nil, 1037, 1186, 9346, 1062, 1094, 1141, 2328, 1041, 1150, nil, 2751, nil, nil, -7, 10186, nil, nil, nil, nil, nil, 25886, nil, 25903, nil, 25910, nil, 25940, nil, nil, nil, nil, 373, 641, 1042, nil, 32, nil, 1163, 1173, 11166, 4020, nil, nil, 1178, 48, nil, nil, nil, nil, 24455, nil, 1061, nil, nil, 1063, 1064, 1069, 1078, nil, 1079, nil, 434, nil, nil, nil, 682, 25227, nil, nil, 1099, nil, nil, nil, 2892, 520, 452, 340, 1158, 102, nil, 1085, 1095, 1097, 1098, 1099, 3197, 1107, 3301, 2469, nil, nil, nil, 415, 1059, nil, nil, 4302, 2610, nil, 25734, nil, 25741, nil, 25758, nil, 443, nil, nil, nil, 1327, 1152, 1156, nil, 1249, 17186, 25434, 25366, 516, 25289, nil, nil, nil, nil, 3391, 1131, 636, nil, nil, nil, 1254, 1273, 1278, 1161, 1162, 1166, 1171, nil, nil, 1186, -11, 10, -9, 1095, 1184, 1194, nil, nil, nil, nil, 24330, nil, nil, nil, nil, -8, nil, -105, nil ] racc_action_default = [ -1, -624, -623, -624, -2, -610, -4, -5, -624, -8, -9, -624, -624, -624, -29, -624, -624, -624, -280, -624, -40, -43, -612, -624, -48, -50, -51, -52, -57, -257, -257, -257, -294, -333, -334, -69, -623, -73, -81, -83, -624, -516, -517, -624, -624, -624, -624, -624, -612, -238, -271, -272, -273, -274, -275, -276, -277, -278, -279, -599, -282, -285, -623, -292, -302, -405, -624, -624, -307, -310, -610, -624, -318, -325, -624, -335, -336, -447, -448, -449, -450, -451, -452, -623, -455, -623, -623, -623, -623, -623, -623, -623, -492, -498, -500, -501, -502, -503, -597, -505, -506, -598, -508, -509, -510, -511, -512, -513, -514, -515, -520, -521, 1051, -3, -611, -619, -620, -621, -7, -624, -624, -624, -624, -624, -624, -17, -624, -112, -113, -114, -115, -116, -117, -118, -119, -120, -124, -125, -126, -127, -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, -189, -190, -191, -192, -193, -194, -22, -121, -623, -624, -624, -623, -624, -624, -609, -624, -624, -624, -624, -624, -612, -613, -47, -624, -516, -517, -624, -280, -624, -624, -230, -624, -623, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -624, -411, -414, -624, -607, -608, -58, -624, -301, -624, -428, -431, -64, -623, -425, -65, -612, -66, -239, -252, -623, -623, -256, -624, -262, -624, -592, -612, -624, -67, -68, -610, -13, -14, -624, -71, -623, -612, -624, -74, -77, -623, -89, -90, -624, -624, -97, -294, -297, -612, -418, -333, -334, -337, -426, -624, -79, -624, -85, -290, -499, -624, -215, -216, -231, -624, -623, -284, -624, -624, -240, -616, -616, -624, -623, -303, -304, -548, -49, -624, -624, -624, -624, -610, -624, -611, -516, -517, -624, -624, -280, -624, -358, -359, -624, -321, -624, -112, -113, -154, -155, -156, -172, -177, -184, -187, -328, -624, -516, -517, -587, -588, -453, -624, -476, -624, -478, -624, -480, -624, -624, -460, -624, -624, -466, -624, -624, -472, -624, -624, -474, -624, -491, -493, -494, -495, -496, -6, -622, -23, -24, -25, -26, -27, -623, -624, -19, -20, -21, -122, -624, -30, -39, -267, -624, -624, -266, -31, -197, -612, -247, -248, -623, -623, -600, -601, -257, -423, -602, -603, -601, -600, -257, -422, -424, -602, -603, -37, -205, -38, -624, -41, -42, -195, -262, -44, -45, -46, -612, -300, -624, -624, -623, -290, -624, -624, -624, -206, -207, -208, -209, -210, -211, -212, -213, -217, -218, -219, -220, -221, -222, -223, -224, -225, -226, -227, -228, -229, -232, -233, -234, -235, -612, -623, -257, -600, -601, -54, -59, -258, -419, -623, -623, -612, -612, -296, -253, -624, -261, -254, -624, -259, -624, -263, -624, -596, -12, -611, -16, -612, -70, -288, -86, -75, -624, -612, -623, -624, -624, -96, -624, -499, -624, -82, -87, -624, -624, -624, -624, -236, -624, -439, -624, -286, -614, -241, -618, -617, -243, -618, -291, -624, -590, -616, -624, -624, -548, -408, -586, -586, -531, -533, -533, -533, -547, -549, -550, -551, -552, -553, -554, -555, -624, -557, -559, -561, -566, -568, -569, -571, -576, -578, -579, -581, -582, -583, -624, -623, -349, -350, -623, -624, -624, -624, -624, -434, -623, -624, -624, -290, -315, -107, -108, -624, -110, -624, -280, -624, -624, -326, -548, -330, -624, -454, -477, -482, -483, -485, -456, -479, -457, -481, -458, -459, -624, -462, -464, -624, -465, -468, -469, -624, -470, -471, -624, -497, -624, -18, -624, -28, -270, -624, -624, -427, -624, -249, -251, -624, -624, -60, -245, -246, -420, -624, -624, -62, -421, -624, -624, -299, -600, -601, -600, -601, -612, -195, -624, -394, -395, -612, -397, -412, -53, -415, -623, -429, -432, -244, -295, -623, -260, -264, -624, -593, -594, -595, -15, -72, -624, -78, -84, -612, -600, -601, -623, -93, -95, -624, -80, -624, -204, -214, -612, -623, -623, -283, -612, -616, -293, -591, -406, -623, -623, -612, -624, -529, -530, -624, -624, -540, -624, -543, -624, -545, -624, -360, -624, -362, -364, -371, -612, -560, -570, -580, -584, -623, -351, -623, -308, -352, -353, -311, -624, -314, -624, -612, -600, -601, -604, -289, -624, -107, -108, -109, -624, -624, -623, -319, -522, -523, -624, -322, -623, -623, -548, -624, -624, -612, -624, -623, -461, -463, -467, -473, -475, -10, -123, -268, -624, -198, -624, -615, -623, -33, -200, -34, -201, -61, -35, -203, -36, -202, -63, -196, -624, -624, -624, -624, -427, -624, -586, -586, -376, -623, -623, -623, -393, -624, -612, -399, -555, -563, -564, -574, -623, -417, -416, -55, -623, -623, -255, -265, -76, -91, -88, -298, -623, -356, -623, -440, -623, -441, -442, -287, -242, -624, -624, -612, -586, -567, -585, -532, -533, -533, -558, -533, -533, -577, -533, -555, -572, -612, -624, -369, -624, -556, -624, -354, -624, -624, -623, -623, -313, -624, -427, -624, -107, -108, -111, -612, -623, -624, -525, -624, -624, -624, -612, -527, -331, -589, -484, -487, -488, -489, -490, -624, -269, -32, -199, -250, -624, -237, -624, -374, -375, -384, -378, -386, -624, -389, -624, -391, -396, -624, -624, -624, -562, -624, -624, -623, -624, -624, -11, -623, -446, -357, -624, -624, -444, -409, -410, -407, -528, -624, -536, -624, -538, -624, -541, -624, -544, -546, -361, -363, -367, -624, -372, -305, -624, -306, -624, -624, -624, -623, -316, -427, -624, -624, -323, -327, -329, -526, -548, -486, -586, -565, -377, -623, -623, -623, -623, -575, -623, -398, -612, -401, -403, -404, -573, -624, -290, -413, -624, -430, -433, -445, -623, -98, -99, -624, -624, -106, -443, -533, -533, -533, -533, -365, -624, -370, -624, -623, -309, -312, -264, -623, -623, -320, -524, -623, -623, -373, -624, -381, -624, -383, -624, -387, -624, -390, -392, -400, -624, -289, -604, -56, -439, -623, -624, -624, -105, -624, -534, -537, -539, -542, -624, -368, -623, -435, -436, -437, -624, -624, -624, -623, -623, -623, -623, -402, -438, -612, -600, -601, -604, -104, -533, -366, -355, -317, -324, -332, -624, -379, -382, -385, -388, -427, -535, -623, -380 ] clist = [ '6,299,220,419,366,584,262,280,280,280,135,135,130,130,125,208,327,335', '488,213,416,393,499,133,133,577,580,439,325,4,693,274,523,279,279,279', '117,331,442,532,670,547,753,670,705,706,263,633,846,114,339,340,113', '297,343,673,313,313,316,320,330,743,794,837,493,426,432,338,338,834', '720,338,9,923,554,130,951,118,9,816,957,374,926,376,378,381,384,387', '390,376,313,797,130,955,673,266,272,275,728,731,295,117,375,399,400', '401,402,223,391,535,538,614,851,849,617,484,597,344,599,740,338,338', '338,338,986,354,604,860,598,661,611,863,989,615,356,827,615,665,666', '752,600,277,289,290,756,942,850,341,334,696,796,328,281,281,281,326', '367,747,798,351,336,541,370,979,499,954,663,333,545,700,337,628,483', '804,491,808,449,492,670,670,951,809,332,397,9,415,1019,734,957,820,906', '673,415,403,372,373,899,377,380,1,664,1029,383,386,389,870,758,759,392', '861,420,923,858,279,427,436,1017,405,412,445,446,447,448,832,841,353', '450,207,17,679,893,495,829,945,17,902,124,688,602,342,2,,280,654,732', ',834,,,224,703,280,510,,1037,,,,224,224,224,,17,304,304,,837,504,279', ',490,420,,,279,,,279,498,498,834,524,788,554,,,883,884,947,520,,,224', '224,411,417,224,348,,,437,441,426,432,,,517,681,,813,807,,,509,,274', ',,515,313,513,699,117,527,912,581,582,,,533,521,795,542,801,,507,313', '554,506,,17,1038,338,338,,224,224,224,224,17,587,709,711,713,,,,,,834', '295,,,854,508,295,,761,,684,761,1020,934,313,117,313,489,735,,684,833', ',835,,990,494,601,281,,,583,777,,812,,16,281,782,,634,,16,6,649,135', ',130,,627,,810,,,,,,,133,,,498,498,670,,640,,,641,,16,,626,,646,673', '17,224,224,224,684,991,,224,224,224,224,224,224,667,668,420,427,436', '279,543,,,,866,17,,,656,,677,864,865,,442,,680,,,,9,824,,,524,,,657', '640,,,641,524,935,,657,657,554,639,224,,,,,645,224,,298,224,,821,1030', ',16,,,,,,810,420,,16,279,427,436,17,,17,,,,304,17,427,436,,692,,313', ',,,859,,933,,313,,304,,,,,,,662,,17,,224,,801,948,,801,949,,801,,801', ',,224,224,,,,,936,,,,676,,,595,,595,,420,973,,279,427,436,,,966,,,,', '684,,751,,,16,757,791,,,,,,,,729,729,981,,806,669,,,,,,,,,16,135,748', '130,17,766,914,916,634,918,920,,921,799,133,,524,805,,,1021,815,,828', ',823,,814,,,697,,,1047,,634,657,,1025,,801,498,801,415,801,,801,,410', '845,,,224,554,,,640,799,,641,868,16,646,16,,817,822,,16,,,313,298,,', ',1023,1024,,,,,313,853,,,869,,,634,801,,,16,,773,775,817,855,817,,778', '780,,,441,,17,,,,,,,304,338,224,,420,436,427,279,304,,,,,,,772,224,130', ',,,298,,,,,298,,,,498,792,,1012,1013,1014,1015,,799,,,862,911,,,,867', ',,,,886,886,886,,,922,16,1031,,,,,17,,,17,,,,,,224,,904,,830,,908,830', '313,941,,,224,,,944,224,,791,,928,791,,791,1048,,,634,,,,,29,937,,,', '338,29,,,,877,,,,,,684,,338,224,224,29,,,,224,224,,,224,29,29,29,,29', ',,,,,,,729,,,,,,,,938,,,,,,16,,,,304,,,,29,29,,,29,,313,304,,,,,,,,', '793,,313,17,17,,,,,,1001,,,791,,791,,791,,791,,886,886,886,886,,886', ',,,,,29,,,,436,29,29,29,29,29,224,,988,,16,1008,224,16,,836,,838,17', '17,,,,817,,17,18,791,,,,,18,,830,,224,792,,,792,,792,,,420,,,279,427', '436,634,,,,,817,,,,18,306,306,886,886,886,886,896,,,17,887,889,891,17', '17,,,,,,,725,,17,727,,886,,,,29,29,29,29,350,,,29,29,29,29,29,29,,,', ',,,,,,,224,29,17,17,,,,,,,,,17,224,,,,,,,16,16,,,18,,,,,,792,,792,18', '792,29,792,,,,,29,,,29,,,958,,,,17,,,,17,,,,969,,,29,,29,,,,,29,,16', '16,,,,,,16,950,792,952,,,,17,,,,,,,825,826,29,42,29,,,,,42,,,974,,975', ',976,29,29,993,995,997,999,,1000,,17,18,,,,16,,,,16,16,42,303,303,,17', ',,,16,17,,,17,17,18,,,,,,,875,,,,,,,,,224,,,,,347,,,369,,16,16,,29,', ',,,,,16,,,,1026,,1027,,1028,,1043,1044,1045,1046,,,898,,,,900,901,,1036', ',18,,18,42,,905,306,18,,1050,,,42,,16,,29,,16,,,,,306,,,,,,1049,,,18', ',,,,930,931,,,,,,,,,,16,,,,,,,,,,,,596,,596,,,,,,,,,29,,,,,,,,,29,16', '41,,,,962,,41,,965,,,,29,,16,,42,,,16,,,16,16,,,,,18,,,,,,41,302,302', ',985,,42,,,,,,,,,,,,,,,,,,,29,,,29,,,,,,29,346,,1006,368,,,,,,,,29,', ',,29,,1018,,,,,1022,,,,,,,,,,42,,42,,,,303,42,,,,41,,,,,,,29,29,41,', ',303,29,29,,,29,,18,,42,,,,,306,,,,,,,,306,,,,,,,,,,,,,,,369,,369,,', ',,,,,,,,,,,,,,,,,29,29,,,,,19,,,,,,19,,,,,,18,,,18,,,41,,,,42,,,,,,', ',,,,29,19,,,,,29,,,41,,,29,29,,,,,,29,,,,,,,,,,,29,,,,,,352,,,,,,,,', ',,,,,,,,,,,,,,,,,,,29,,,,29,29,41,,41,,,,302,41,29,19,306,,,,,,,,19', ',,306,42,302,,,,,,303,,,41,18,18,,,303,29,,29,29,,,,,,,,,29,29,,,,,', '413,,,368,,368,,444,,,,561,,,,,,,,,,,,,,,,18,18,,,,29,874,18,42,29,', '42,,,,,,,,,19,,,,,,41,,440,,,,,,,,,,,29,,,,,19,,501,,503,596,,505,18', ',,,18,18,,,,,,,,,18,,,,,,29,,,,,,,,,,,,,,,29,,,,,29,,,29,29,544,18,18', ',,,,,19,,19,18,303,,,19,29,,,,,,,303,,,,,,,,,41,,,42,42,,,302,19,,,', ',,596,302,,,18,,,,18,,,,971,,,,,,,,,,,,,,,,,,,,,,630,,,,18,,42,42,,', ',,,42,,,561,,,,,,41,,,41,,,,,,,715,,,,,18,19,,,,,,,,,,,,,,18,,,369,', '18,42,,18,18,42,42,,,,,,,561,,42,,,,,,,,,,,671,,,544,,674,,675,,,,,', ',,,,,,,,42,42,,,,,,,,,42,,,,,,,,671,302,,544,,,,800,,,,,302,,,,,,,19', ',,,,41,41,,369,,721,,42,,,,42,,,,968,,,,,,,,,,,,,,,,,561,,561,,,,,,715', '42,,843,,,,,,,,41,41,,,,,,41,,,,,,,19,,,19,,,767,,,42,671,544,,561,', ',,,,,,,,,42,,,,,42,,,42,42,,368,,,41,,,,41,41,,,,811,,,,,41,,,,,,,,', ',,,,,,,,819,440,,,,,,,,,,,,,,41,41,,,,840,,,,,41,,,,,,,715,,715,,,,', ',444,,,,,,,,,,,,,,,19,19,,,,368,,,,41,,,,41,,,,967,,876,800,,231,800', ',,,,,,,278,278,278,,,,,,,,,,41,322,323,324,,561,,,19,19,,,,,,19,977', '715,278,,,,,,,,,,,,,,,41,561,,,,,,,,,,,,,,41,,,,,41,,,41,41,,,19,,,', '19,19,,,,,715,,715,,19,,,,,,,,,,800,,,544,,,,,,,,,,,,,,,,,,,19,19,715', ',,,,,,,19,,,,,,,,,,,,,,,,,,,,,,,,984,,,,,,,,,,,,,,,19,,,,19,,,,972,', ',278,418,278,,,,438,443,,,,,,,,,,,,,,,231,19,,457,458,459,460,461,462', '463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479', '480,481,482,,,,,,19,278,,,,,,278,,,278,,,,,19,,278,,278,19,,278,19,19', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,529,,,,,,,,,278,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,,438,655,418,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,278,,,278,,278,,278,,,,,,,,,,,,278,,,,,,,,,690', '691,,,,,,,,,,278,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,', ',,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,769,,,278,278', '774,776,,,,,779,781,,,655,783,,,,,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,', ',,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,278,,,,,,,,', ',,,278,,,,,,,,,,,,,,,,,,,,,,278,,878,,,,,,,,,,,,,,774,776,781,779,,881', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,278,878,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,278' ] racc_goto_table = arr = ::Array.new(3255, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '6,53,34,25,60,95,155,71,71,71,65,65,61,61,17,17,51,89,42,27,30,60,76', '64,64,92,92,30,34,2,13,74,55,36,36,36,98,71,20,10,77,154,99,77,139,139', '39,26,93,8,19,19,5,50,19,199,68,68,54,67,6,58,144,194,25,40,40,32,32', '189,134,32,9,132,185,61,195,7,9,14,150,6,135,6,6,6,6,6,6,6,68,147,61', '149,199,41,41,41,94,94,49,98,172,19,19,19,19,22,172,72,72,175,108,14', '175,40,59,5,59,109,32,32,32,32,110,111,176,112,113,43,176,114,115,176', '116,147,176,43,43,117,118,48,48,48,119,120,106,105,104,103,136,102,73', '73,73,101,100,97,142,96,91,88,87,135,76,148,75,70,151,152,153,66,156', '157,160,161,51,162,77,77,195,163,73,7,9,71,164,165,150,166,167,199,71', '9,170,171,46,173,174,1,45,149,177,178,179,180,181,182,183,184,6,132', '58,36,74,61,135,33,31,32,32,32,32,188,134,21,27,18,24,55,147,51,191', '192,24,15,11,55,198,107,3,,71,25,95,,189,,,24,154,71,51,,135,,,,24,24', '24,,24,24,24,,194,34,36,,74,6,,,36,,,36,6,6,189,53,26,185,,,139,139', '144,34,,,24,24,22,22,24,24,,,22,22,40,40,,,27,25,,26,43,,,50,,74,,,50', '68,54,72,98,27,139,19,19,,,32,67,145,6,190,,8,68,185,5,,24,93,32,32', ',24,24,24,24,24,27,187,187,187,,,,,,189,49,,,26,9,49,,176,,40,176,14', '94,68,98,68,48,25,,40,145,,145,,99,48,39,73,,,5,42,,55,,23,73,42,,34', ',23,6,51,65,,61,,17,,76,,,,,,,64,,,6,6,77,,6,,,74,,23,,2,,74,199,24', '24,24,24,40,139,,24,24,24,24,24,24,51,51,6,74,61,36,73,,,,154,24,,,34', ',51,10,10,,20,,51,,,,9,72,,,53,,,6,6,,,74,53,26,,6,6,185,41,24,,,,,41', '24,,12,24,,30,13,,23,,,,,,76,6,,23,36,74,61,24,,24,,,,24,24,74,61,,32', ',68,,,,25,,92,,68,,24,,,,,,,41,,24,,24,,190,145,,190,145,,190,,190,', ',24,24,,,,,10,,,,9,,,24,,24,,6,145,,36,74,61,,,92,,,,,40,,32,,,23,32', '138,,,,,,,,98,98,92,,89,73,,,,,,,,,23,65,98,61,24,17,187,187,34,187', '187,,187,34,64,,53,155,,,95,51,,138,,51,,53,,,73,,,26,,34,6,,145,,190', '6,190,71,190,,190,,12,51,,,24,185,,,6,34,,74,60,23,74,23,,6,6,,23,,', '68,12,,,,10,10,,,,,68,71,,,51,,,34,190,,,23,,22,22,6,19,6,,22,22,,,22', ',24,,,,,,,24,32,24,,6,61,74,36,24,,,,,,,73,24,61,,,,12,,,,,12,,,,6,140', ',187,187,187,187,,34,,,98,51,,,,98,,,,,6,6,6,,,51,23,25,,,,,24,,,24', ',,,,,24,,6,,140,,6,140,68,51,,,24,,,138,24,,138,,19,138,,138,187,,,34', ',,,,44,19,,,,32,44,,,,22,,,,,,40,,32,24,24,44,,,,24,24,,,24,44,44,44', ',44,,,,,,,,98,,,,,,,,98,,,,,,23,,,,24,,,,44,44,,,44,,68,24,,,,,,,,,143', ',68,24,24,,,,,,34,,,138,,138,,138,,138,,6,6,6,6,,6,,,,,,44,,,,61,44', '44,44,44,44,24,,98,,23,27,24,23,,143,,143,24,24,,,,6,,24,28,138,,,,', '28,,140,,24,140,,,140,,140,,,6,,,36,74,61,34,,,,,6,,,,28,28,28,6,6,6', '6,24,,,24,141,141,141,24,24,,,,,,,12,,24,12,,6,,,,44,44,44,44,28,,,44', '44,44,44,44,44,,,,,,,,,,,24,44,24,24,,,,,,,,,24,24,,,,,,,23,23,,,28', ',,,,,140,,140,28,140,44,140,,,,,44,,,44,,,24,,,,24,,,,24,,,,24,,,44', ',44,,,,,44,,23,23,,,,,,23,143,140,143,,,,24,,,,,,,12,12,44,57,44,,,', ',57,,,143,,143,,143,44,44,141,141,141,141,,141,,24,28,,,,23,,,,23,23', '57,57,57,,24,,,,23,24,,,24,24,28,,,,,,,12,,,,,,,,,24,,,,,57,,,57,,23', '23,,44,,,,,,,23,,,,143,,143,,143,,141,141,141,141,,,12,,,,12,12,,143', ',28,,28,57,,12,28,28,,141,,,57,,23,,44,,23,,,,,28,,,,,,143,,,28,,,,', '12,12,,,,,,,,,,23,,,,,,,,,,,,28,,28,,,,,,,,,44,,,,,,,,,44,23,56,,,,12', ',56,,12,,,,44,,23,,57,,,23,,,23,23,,,,,28,,,,,,56,56,56,,12,,57,,,,', ',,,,,,,,,,,,,,44,,,44,,,,,,44,56,,12,56,,,,,,,,44,,,,44,,12,,,,,12,', ',,,,,,,,57,,57,,,,57,57,,,,56,,,,,,,44,44,56,,,57,44,44,,,44,,28,,57', ',,,,28,,,,,,,,28,,,,,,,,,,,,,,,57,,57,,,,,,,,,,,,,,,,,,,,44,44,,,,,29', ',,,,,29,,,,,,28,,,28,,,56,,,,57,,,,,,,,,,,44,29,,,,,44,,,56,,,44,44', ',,,,,44,,,,,,,,,,,44,,,,,,29,,,,,,,,,,,,,,,,,,,,,,,,,,,,44,,,,44,44', '56,,56,,,,56,56,44,29,28,,,,,,,,29,,,28,57,56,,,,,,57,,,56,28,28,,,57', '44,,44,44,,,,,,,,,44,44,,,,,,69,,,56,,56,,69,,,,133,,,,,,,,,,,,,,,,28', '28,,,,44,28,28,57,44,,57,,,,,,,,,29,,,,,,56,,29,,,,,,,,,,,44,,,,,29', ',69,,69,28,,69,28,,,,28,28,,,,,,,,,28,,,,,,44,,,,,,,,,,,,,,,44,,,,,44', ',,44,44,69,28,28,,,,,,29,,29,28,57,,,29,44,,,,,,,57,,,,,,,,,56,,,57', '57,,,56,29,,,,,,28,56,,,28,,,,28,,,,28,,,,,,,,,,,,,,,,,,,,,,69,,,,28', ',57,57,,,,,,57,,,133,,,,,,56,,,56,,,,,,,133,,,,,28,29,,,,,,,,,,,,,,28', ',,57,,28,57,,28,28,57,57,,,,,,,133,,57,,,,,,,,,,,69,,,69,,69,,69,,,', ',,,,,,,,,,57,57,,,,,,,,,57,,,,,,,,69,56,,69,,,,133,,,,,56,,,,,,,29,', ',,,56,56,,57,,69,,57,,,,57,,,,57,,,,,,,,,,,,,,,,,133,,133,,,,,,133,57', ',133,,,,,,,,56,56,,,,,,56,,,,,,,29,,,29,,,69,,,57,69,69,,133,,,,,,,', ',,,57,,,,,57,,,57,57,,56,,,56,,,,56,56,,,,69,,,,,56,,,,,,,,,,,,,,,,', '69,29,,,,,,,,,,,,,,56,56,,,,69,,,,,56,,,,,,,133,,133,,,,,,69,,,,,,,', ',,,,,,,29,29,,,,56,,,,56,,,,56,,,,56,,69,133,,35,133,,,,,,,,35,35,35', ',,,,,,,,,56,35,35,35,,133,,,29,29,,,,,,29,133,133,35,,,,,,,,,,,,,,,56', '133,,,,,,,,,,,,,,56,,,,,56,,,56,56,,,29,,,,29,29,,,,,133,,133,,29,,', ',,,,,,,133,,,69,,,,,,,,,,,,,,,,,,,29,29,133,,,,,,,,29,,,,,,,,,,,,,,', ',,,,,,,,,69,,,,,,,,,,,,,,,29,,,,29,,,,29,,,35,35,35,,,,35,35,,,,,,,', ',,,,,,,35,29,,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35', '35,35,35,35,35,35,35,35,,,,,,29,35,,,,,,35,,,35,,,,,29,,35,,35,29,,35', '29,29,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,35,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,35,35,35,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,35,,,35,,35,,35,,,,,,,,,,,,35,,,,,,,,,35,35,,', ',,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,35,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,,,35,35,35,35,,,,,35', '35,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,', ',,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,', ',,,,35,,35,,,,,,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ] racc_goto_check = arr = ::Array.new(3255, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_goto_pointer = [ nil, 199, 27, 240, nil, 47, -2, 69, 44, 70, -287, 226, 465, -501, -614, -581, nil, 3, 215, -16, -179, 154, 84, 393, 226, -209, -372, 2, 984, 1547, -190, 8, 1, 92, -20, 2247, 1, nil, nil, 19, -148, 66, -248, -354, 842, -287, -611, nil, 109, 64, 17, -45, nil, -36, 20, -285, 1358, 1167, -532, -238, -70, 1, nil, nil, 12, -1, -238, 15, 19, 1499, 105, -25, -222, 120, 1, -318, -259, -457, nil, nil, nil, nil, nil, nil, nil, nil, nil, 88, -173, -47, nil, 95, -314, -677, -483, -339, 88, -440, 31, -558, 82, 95, 90, -384, 85, 79, -582, 170, -619, -471, -810, 53, -620, -227, -620, -806, 61, -460, -226, -457, -723, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, -769, 1383, -492, -762, -509, nil, -55, -504, 112, 238, -501, 265, -597, -328, nil, -568, -729, -801, -814, -169, -376, 105, -296, -19, -89, -488, nil, nil, -96, -490, -94, -485, -799, -398, -505, -630, nil, nil, 114, 112, 17, 111, 111, -269, -247, 114, 114, 114, -553, -400, -400, 117, -540, -263, nil, -200, -485, -639, -326, -472, -649, nil, -647, -812, nil, nil, -133, -445 ] racc_goto_default = [ nil, nil, nil, nil, 5, nil, 292, 7, 345, 293, nil, nil, 531, nil, 847, nil, 291, nil, nil, nil, 14, 15, 21, 230, 321, nil, nil, 745, 228, 229, nil, nil, 20, nil, 329, 24, 25, 26, 27, nil, 687, nil, nil, nil, 310, nil, nil, 28, 421, 35, nil, nil, 37, 40, 39, nil, 225, 226, 594, nil, 132, 429, 131, 134, 78, 79, nil, 93, 49, 284, nil, 422, nil, 423, 434, 642, 496, 282, 267, 50, 51, 52, 53, 54, 55, 56, 57, 58, nil, 268, 64, nil, nil, nil, nil, nil, nil, nil, 578, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 717, 839, nil, 718, 946, 790, 549, nil, 550, nil, nil, 551, nil, 553, 658, nil, nil, nil, 559, nil, nil, nil, 755, nil, nil, nil, 433, 269, nil, nil, nil, nil, nil, nil, nil, nil, 77, 80, 82, nil, nil, nil, nil, nil, 609, nil, nil, nil, nil, nil, nil, nil, nil, 831, 548, nil, 552, 563, 565, 566, 802, 569, 570, 803, 573, 576, nil, 286 ] racc_reduce_table = [ 0, 0, :racc_error, 0, 147, :_reduce_1, 2, 145, :_reduce_2, 2, 146, :_reduce_3, 1, 148, :_reduce_none, 1, 148, :_reduce_none, 3, 148, :_reduce_6, 2, 148, :_reduce_none, 1, 151, :_reduce_8, 0, 155, :_reduce_9, 5, 151, :_reduce_10, 4, 154, :_reduce_11, 2, 156, :_reduce_12, 1, 160, :_reduce_none, 1, 160, :_reduce_none, 3, 160, :_reduce_15, 2, 160, :_reduce_16, 0, 177, :_reduce_17, 4, 153, :_reduce_18, 3, 153, :_reduce_19, 3, 153, :_reduce_20, 3, 153, :_reduce_21, 2, 153, :_reduce_22, 3, 153, :_reduce_23, 3, 153, :_reduce_24, 3, 153, :_reduce_25, 3, 153, :_reduce_26, 3, 153, :_reduce_27, 4, 153, :_reduce_28, 1, 153, :_reduce_none, 3, 153, :_reduce_30, 3, 153, :_reduce_31, 6, 153, :_reduce_32, 5, 153, :_reduce_33, 5, 153, :_reduce_34, 5, 153, :_reduce_35, 5, 153, :_reduce_36, 3, 153, :_reduce_37, 3, 153, :_reduce_38, 3, 153, :_reduce_39, 1, 153, :_reduce_none, 3, 164, :_reduce_41, 3, 164, :_reduce_42, 1, 176, :_reduce_none, 3, 176, :_reduce_44, 3, 176, :_reduce_45, 3, 176, :_reduce_46, 2, 176, :_reduce_47, 1, 176, :_reduce_none, 1, 163, :_reduce_49, 1, 166, :_reduce_none, 1, 166, :_reduce_none, 1, 181, :_reduce_none, 4, 181, :_reduce_53, 0, 189, :_reduce_54, 0, 190, :_reduce_55, 6, 186, :_reduce_56, 1, 188, :_reduce_57, 2, 180, :_reduce_58, 3, 180, :_reduce_59, 4, 180, :_reduce_60, 5, 180, :_reduce_61, 4, 180, :_reduce_62, 5, 180, :_reduce_63, 2, 180, :_reduce_64, 2, 180, :_reduce_65, 2, 180, :_reduce_66, 2, 180, :_reduce_67, 2, 180, :_reduce_68, 1, 165, :_reduce_none, 3, 165, :_reduce_70, 1, 194, :_reduce_none, 3, 194, :_reduce_72, 1, 193, :_reduce_73, 2, 193, :_reduce_74, 3, 193, :_reduce_75, 5, 193, :_reduce_76, 2, 193, :_reduce_77, 4, 193, :_reduce_78, 2, 193, :_reduce_79, 4, 193, :_reduce_80, 1, 193, :_reduce_81, 3, 193, :_reduce_82, 1, 197, :_reduce_none, 3, 197, :_reduce_84, 2, 196, :_reduce_85, 3, 196, :_reduce_86, 1, 199, :_reduce_87, 3, 199, :_reduce_88, 1, 198, :_reduce_89, 1, 198, :_reduce_90, 4, 198, :_reduce_91, 3, 198, :_reduce_92, 3, 198, :_reduce_93, 3, 198, :_reduce_94, 3, 198, :_reduce_95, 2, 198, :_reduce_96, 1, 198, :_reduce_97, 1, 173, :_reduce_98, 1, 173, :_reduce_99, 4, 173, :_reduce_100, 3, 173, :_reduce_101, 3, 173, :_reduce_102, 3, 173, :_reduce_103, 3, 173, :_reduce_104, 2, 173, :_reduce_105, 1, 173, :_reduce_106, 1, 202, :_reduce_107, 1, 202, :_reduce_none, 2, 203, :_reduce_109, 1, 203, :_reduce_110, 3, 203, :_reduce_111, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_115, 1, 204, :_reduce_116, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 161, :_reduce_119, 1, 161, :_reduce_none, 1, 162, :_reduce_121, 0, 210, :_reduce_122, 4, 162, :_reduce_123, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 3, 179, :_reduce_195, 5, 179, :_reduce_196, 3, 179, :_reduce_197, 5, 179, :_reduce_198, 6, 179, :_reduce_199, 5, 179, :_reduce_200, 5, 179, :_reduce_201, 5, 179, :_reduce_202, 5, 179, :_reduce_203, 4, 179, :_reduce_204, 3, 179, :_reduce_205, 3, 179, :_reduce_206, 3, 179, :_reduce_207, 3, 179, :_reduce_208, 3, 179, :_reduce_209, 3, 179, :_reduce_210, 3, 179, :_reduce_211, 3, 179, :_reduce_212, 3, 179, :_reduce_213, 4, 179, :_reduce_214, 2, 179, :_reduce_215, 2, 179, :_reduce_216, 3, 179, :_reduce_217, 3, 179, :_reduce_218, 3, 179, :_reduce_219, 3, 179, :_reduce_220, 3, 179, :_reduce_221, 3, 179, :_reduce_222, 3, 179, :_reduce_223, 3, 179, :_reduce_224, 3, 179, :_reduce_225, 3, 179, :_reduce_226, 3, 179, :_reduce_227, 3, 179, :_reduce_228, 3, 179, :_reduce_229, 2, 179, :_reduce_230, 2, 179, :_reduce_231, 3, 179, :_reduce_232, 3, 179, :_reduce_233, 3, 179, :_reduce_234, 3, 179, :_reduce_235, 3, 179, :_reduce_236, 6, 179, :_reduce_237, 1, 179, :_reduce_none, 1, 213, :_reduce_239, 1, 214, :_reduce_none, 2, 214, :_reduce_241, 4, 214, :_reduce_242, 2, 214, :_reduce_243, 3, 218, :_reduce_244, 1, 219, :_reduce_none, 1, 219, :_reduce_none, 1, 169, :_reduce_247, 1, 169, :_reduce_248, 2, 169, :_reduce_249, 4, 169, :_reduce_250, 2, 169, :_reduce_251, 1, 192, :_reduce_252, 2, 192, :_reduce_253, 2, 192, :_reduce_254, 4, 192, :_reduce_255, 1, 192, :_reduce_256, 0, 222, :_reduce_257, 2, 185, :_reduce_258, 2, 221, :_reduce_259, 2, 220, :_reduce_260, 1, 220, :_reduce_none, 1, 215, :_reduce_262, 2, 215, :_reduce_263, 3, 215, :_reduce_264, 4, 215, :_reduce_265, 1, 175, :_reduce_266, 1, 175, :_reduce_267, 3, 174, :_reduce_268, 4, 174, :_reduce_269, 2, 174, :_reduce_270, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_281, 0, 245, :_reduce_282, 4, 212, :_reduce_283, 2, 212, :_reduce_284, 0, 246, :_reduce_285, 0, 247, :_reduce_286, 5, 212, :_reduce_287, 3, 212, :_reduce_288, 3, 212, :_reduce_289, 2, 212, :_reduce_290, 3, 212, :_reduce_291, 0, 248, :_reduce_292, 4, 212, :_reduce_293, 1, 212, :_reduce_294, 4, 212, :_reduce_295, 3, 212, :_reduce_296, 1, 212, :_reduce_297, 5, 212, :_reduce_298, 4, 212, :_reduce_299, 3, 212, :_reduce_300, 2, 212, :_reduce_301, 1, 212, :_reduce_none, 2, 212, :_reduce_303, 2, 212, :_reduce_304, 6, 212, :_reduce_305, 6, 212, :_reduce_306, 0, 249, :_reduce_307, 0, 250, :_reduce_308, 7, 212, :_reduce_309, 0, 251, :_reduce_310, 0, 252, :_reduce_311, 7, 212, :_reduce_312, 5, 212, :_reduce_313, 4, 212, :_reduce_314, 0, 253, :_reduce_315, 0, 254, :_reduce_316, 9, 212, :_reduce_317, 0, 255, :_reduce_318, 0, 256, :_reduce_319, 7, 212, :_reduce_320, 0, 257, :_reduce_321, 0, 258, :_reduce_322, 0, 259, :_reduce_323, 9, 212, :_reduce_324, 0, 260, :_reduce_325, 0, 261, :_reduce_326, 6, 212, :_reduce_327, 0, 262, :_reduce_328, 6, 212, :_reduce_329, 0, 263, :_reduce_330, 0, 264, :_reduce_331, 9, 212, :_reduce_332, 1, 212, :_reduce_333, 1, 212, :_reduce_334, 1, 212, :_reduce_335, 1, 212, :_reduce_336, 1, 168, :_reduce_337, 1, 265, :_reduce_none, 1, 266, :_reduce_none, 1, 267, :_reduce_none, 1, 268, :_reduce_none, 1, 269, :_reduce_none, 1, 270, :_reduce_none, 1, 271, :_reduce_none, 1, 272, :_reduce_none, 1, 273, :_reduce_none, 1, 274, :_reduce_none, 1, 275, :_reduce_none, 1, 236, :_reduce_none, 1, 236, :_reduce_none, 2, 236, :_reduce_none, 1, 238, :_reduce_none, 1, 238, :_reduce_none, 1, 237, :_reduce_none, 5, 237, :_reduce_355, 1, 158, :_reduce_none, 2, 158, :_reduce_357, 1, 240, :_reduce_none, 1, 240, :_reduce_359, 1, 276, :_reduce_none, 3, 276, :_reduce_361, 1, 279, :_reduce_362, 3, 279, :_reduce_363, 1, 278, :_reduce_364, 4, 278, :_reduce_365, 6, 278, :_reduce_366, 3, 278, :_reduce_367, 5, 278, :_reduce_368, 2, 278, :_reduce_369, 4, 278, :_reduce_370, 1, 278, :_reduce_371, 3, 278, :_reduce_372, 4, 280, :_reduce_373, 2, 280, :_reduce_374, 2, 280, :_reduce_375, 1, 280, :_reduce_376, 2, 285, :_reduce_377, 1, 285, :_reduce_none, 6, 286, :_reduce_379, 8, 286, :_reduce_380, 4, 286, :_reduce_381, 6, 286, :_reduce_382, 4, 286, :_reduce_383, 2, 286, :_reduce_384, 6, 286, :_reduce_385, 2, 286, :_reduce_386, 4, 286, :_reduce_387, 6, 286, :_reduce_388, 2, 286, :_reduce_389, 4, 286, :_reduce_390, 2, 286, :_reduce_391, 4, 286, :_reduce_392, 1, 286, :_reduce_393, 1, 187, :_reduce_394, 1, 187, :_reduce_none, 3, 290, :_reduce_396, 1, 290, :_reduce_397, 4, 290, :_reduce_398, 1, 291, :_reduce_none, 4, 291, :_reduce_400, 1, 292, :_reduce_401, 3, 292, :_reduce_402, 1, 293, :_reduce_403, 1, 293, :_reduce_none, 0, 297, :_reduce_405, 3, 235, :_reduce_406, 4, 295, :_reduce_407, 1, 295, :_reduce_408, 3, 296, :_reduce_409, 3, 296, :_reduce_410, 0, 300, :_reduce_411, 0, 301, :_reduce_412, 6, 299, :_reduce_413, 2, 182, :_reduce_414, 4, 182, :_reduce_415, 5, 182, :_reduce_416, 5, 182, :_reduce_417, 0, 303, :_reduce_418, 3, 234, :_reduce_419, 4, 234, :_reduce_420, 4, 234, :_reduce_421, 3, 234, :_reduce_422, 3, 234, :_reduce_423, 3, 234, :_reduce_424, 2, 234, :_reduce_425, 1, 234, :_reduce_426, 4, 234, :_reduce_427, 0, 304, :_reduce_428, 0, 305, :_reduce_429, 6, 233, :_reduce_430, 0, 306, :_reduce_431, 0, 307, :_reduce_432, 6, 233, :_reduce_433, 0, 309, :_reduce_434, 6, 239, :_reduce_435, 1, 308, :_reduce_none, 1, 308, :_reduce_none, 6, 157, :_reduce_438, 0, 157, :_reduce_439, 1, 310, :_reduce_440, 1, 310, :_reduce_none, 1, 310, :_reduce_none, 2, 311, :_reduce_443, 1, 311, :_reduce_none, 2, 159, :_reduce_445, 1, 159, :_reduce_none, 1, 223, :_reduce_447, 1, 223, :_reduce_448, 1, 223, :_reduce_none, 1, 224, :_reduce_450, 1, 313, :_reduce_451, 1, 313, :_reduce_none, 2, 313, :_reduce_453, 3, 314, :_reduce_454, 1, 314, :_reduce_455, 3, 225, :_reduce_456, 3, 226, :_reduce_457, 3, 227, :_reduce_458, 3, 227, :_reduce_459, 1, 318, :_reduce_460, 3, 318, :_reduce_461, 1, 319, :_reduce_none, 2, 319, :_reduce_463, 3, 229, :_reduce_464, 3, 229, :_reduce_465, 1, 321, :_reduce_466, 3, 321, :_reduce_467, 3, 228, :_reduce_468, 3, 228, :_reduce_469, 3, 230, :_reduce_470, 3, 230, :_reduce_471, 1, 322, :_reduce_472, 3, 322, :_reduce_473, 1, 323, :_reduce_474, 3, 323, :_reduce_475, 1, 315, :_reduce_476, 2, 315, :_reduce_477, 1, 316, :_reduce_478, 2, 316, :_reduce_479, 1, 317, :_reduce_480, 2, 317, :_reduce_481, 1, 320, :_reduce_482, 0, 325, :_reduce_483, 3, 320, :_reduce_484, 0, 326, :_reduce_485, 4, 320, :_reduce_486, 1, 324, :_reduce_487, 1, 324, :_reduce_488, 1, 324, :_reduce_489, 1, 324, :_reduce_none, 2, 208, :_reduce_491, 1, 208, :_reduce_492, 1, 327, :_reduce_none, 1, 327, :_reduce_none, 1, 327, :_reduce_none, 1, 327, :_reduce_none, 3, 209, :_reduce_497, 1, 312, :_reduce_none, 2, 312, :_reduce_499, 1, 211, :_reduce_none, 1, 211, :_reduce_none, 1, 211, :_reduce_none, 1, 211, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 200, :_reduce_none, 1, 201, :_reduce_509, 1, 201, :_reduce_510, 1, 201, :_reduce_511, 1, 201, :_reduce_512, 1, 201, :_reduce_513, 1, 201, :_reduce_514, 1, 201, :_reduce_515, 1, 231, :_reduce_516, 1, 231, :_reduce_517, 1, 167, :_reduce_518, 1, 167, :_reduce_519, 1, 172, :_reduce_520, 1, 172, :_reduce_521, 1, 241, :_reduce_522, 0, 328, :_reduce_523, 4, 241, :_reduce_524, 2, 241, :_reduce_525, 3, 243, :_reduce_526, 2, 243, :_reduce_527, 4, 329, :_reduce_528, 2, 329, :_reduce_529, 2, 329, :_reduce_530, 1, 329, :_reduce_none, 2, 331, :_reduce_532, 0, 331, :_reduce_533, 6, 298, :_reduce_534, 8, 298, :_reduce_535, 4, 298, :_reduce_536, 6, 298, :_reduce_537, 4, 298, :_reduce_538, 6, 298, :_reduce_539, 2, 298, :_reduce_540, 4, 298, :_reduce_541, 6, 298, :_reduce_542, 2, 298, :_reduce_543, 4, 298, :_reduce_544, 2, 298, :_reduce_545, 4, 298, :_reduce_546, 1, 298, :_reduce_547, 0, 298, :_reduce_548, 1, 294, :_reduce_549, 1, 294, :_reduce_550, 1, 294, :_reduce_551, 1, 294, :_reduce_552, 1, 277, :_reduce_none, 1, 277, :_reduce_554, 1, 333, :_reduce_none, 3, 333, :_reduce_556, 1, 287, :_reduce_557, 3, 287, :_reduce_558, 1, 334, :_reduce_none, 2, 335, :_reduce_560, 1, 335, :_reduce_561, 2, 336, :_reduce_562, 1, 336, :_reduce_563, 1, 281, :_reduce_none, 3, 281, :_reduce_565, 1, 330, :_reduce_none, 3, 330, :_reduce_567, 1, 337, :_reduce_none, 1, 337, :_reduce_none, 2, 282, :_reduce_570, 1, 282, :_reduce_571, 3, 338, :_reduce_572, 3, 339, :_reduce_573, 1, 288, :_reduce_574, 3, 288, :_reduce_575, 1, 332, :_reduce_576, 3, 332, :_reduce_577, 1, 340, :_reduce_none, 1, 340, :_reduce_none, 2, 289, :_reduce_580, 1, 289, :_reduce_581, 1, 341, :_reduce_none, 1, 341, :_reduce_none, 2, 284, :_reduce_584, 2, 283, :_reduce_585, 0, 283, :_reduce_586, 1, 244, :_reduce_none, 0, 342, :_reduce_588, 4, 244, :_reduce_589, 1, 232, :_reduce_590, 2, 232, :_reduce_591, 1, 217, :_reduce_none, 3, 217, :_reduce_593, 3, 343, :_reduce_594, 3, 343, :_reduce_595, 2, 343, :_reduce_596, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 191, :_reduce_none, 1, 184, :_reduce_none, 1, 184, :_reduce_none, 1, 184, :_reduce_none, 1, 184, :_reduce_none, 1, 302, :_reduce_none, 1, 302, :_reduce_none, 1, 302, :_reduce_none, 1, 183, :_reduce_none, 1, 183, :_reduce_none, 1, 171, :_reduce_none, 0, 149, :_reduce_none, 1, 149, :_reduce_none, 0, 178, :_reduce_none, 1, 178, :_reduce_none, 2, 195, :_reduce_none, 2, 170, :_reduce_none, 0, 216, :_reduce_none, 1, 216, :_reduce_none, 1, 216, :_reduce_none, 1, 242, :_reduce_619, 1, 242, :_reduce_none, 1, 152, :_reduce_none, 2, 152, :_reduce_622, 0, 150, :_reduce_623 ] racc_reduce_n = 624 racc_shift_n = 1051 racc_token_table = { false => 0, :error => 1, :kCLASS => 2, :kMODULE => 3, :kDEF => 4, :kUNDEF => 5, :kBEGIN => 6, :kRESCUE => 7, :kENSURE => 8, :kEND => 9, :kIF => 10, :kUNLESS => 11, :kTHEN => 12, :kELSIF => 13, :kELSE => 14, :kCASE => 15, :kWHEN => 16, :kWHILE => 17, :kUNTIL => 18, :kFOR => 19, :kBREAK => 20, :kNEXT => 21, :kREDO => 22, :kRETRY => 23, :kIN => 24, :kDO => 25, :kDO_COND => 26, :kDO_BLOCK => 27, :kDO_LAMBDA => 28, :kRETURN => 29, :kYIELD => 30, :kSUPER => 31, :kSELF => 32, :kNIL => 33, :kTRUE => 34, :kFALSE => 35, :kAND => 36, :kOR => 37, :kNOT => 38, :kIF_MOD => 39, :kUNLESS_MOD => 40, :kWHILE_MOD => 41, :kUNTIL_MOD => 42, :kRESCUE_MOD => 43, :kALIAS => 44, :kDEFINED => 45, :klBEGIN => 46, :klEND => 47, :k__LINE__ => 48, :k__FILE__ => 49, :k__ENCODING__ => 50, :tIDENTIFIER => 51, :tFID => 52, :tGVAR => 53, :tIVAR => 54, :tCONSTANT => 55, :tLABEL => 56, :tCVAR => 57, :tNTH_REF => 58, :tBACK_REF => 59, :tSTRING_CONTENT => 60, :tINTEGER => 61, :tFLOAT => 62, :tREGEXP_END => 63, :tUPLUS => 64, :tUMINUS => 65, :tUMINUS_NUM => 66, :tPOW => 67, :tCMP => 68, :tEQ => 69, :tEQQ => 70, :tNEQ => 71, :tGEQ => 72, :tLEQ => 73, :tANDOP => 74, :tOROP => 75, :tMATCH => 76, :tNMATCH => 77, :tDOT => 78, :tDOT2 => 79, :tDOT3 => 80, :tAREF => 81, :tASET => 82, :tLSHFT => 83, :tRSHFT => 84, :tCOLON2 => 85, :tCOLON3 => 86, :tOP_ASGN => 87, :tASSOC => 88, :tLPAREN => 89, :tLPAREN2 => 90, :tRPAREN => 91, :tLPAREN_ARG => 92, :tLBRACK => 93, :tLBRACK2 => 94, :tRBRACK => 95, :tLBRACE => 96, :tLBRACE_ARG => 97, :tSTAR => 98, :tSTAR2 => 99, :tAMPER => 100, :tAMPER2 => 101, :tTILDE => 102, :tPERCENT => 103, :tDIVIDE => 104, :tPLUS => 105, :tMINUS => 106, :tLT => 107, :tGT => 108, :tPIPE => 109, :tBANG => 110, :tCARET => 111, :tLCURLY => 112, :tRCURLY => 113, :tBACK_REF2 => 114, :tSYMBEG => 115, :tSTRING_BEG => 116, :tXSTRING_BEG => 117, :tREGEXP_BEG => 118, :tWORDS_BEG => 119, :tQWORDS_BEG => 120, :tSTRING_DBEG => 121, :tSTRING_DVAR => 122, :tSTRING_END => 123, :tSTRING => 124, :tSYMBOL => 125, :tNL => 126, :tEH => 127, :tCOLON => 128, :tCOMMA => 129, :tSPACE => 130, :tSEMI => 131, :tLAMBDA => 132, :tLAMBEG => 133, :tDSTAR => 134, :tCHAR => 135, :tSYMBOLS_BEG => 136, :tQSYMBOLS_BEG => 137, :tSTRING_DEND => 138, :tUBANG => 139, :tRATIONAL => 140, :tIMAGINARY => 141, :tEQL => 142, :tLOWEST => 143 } racc_nt_base = 144 racc_use_result_var = true Racc_arg = [ racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var ] Racc_token_to_s_table = [ "$end", "error", "kCLASS", "kMODULE", "kDEF", "kUNDEF", "kBEGIN", "kRESCUE", "kENSURE", "kEND", "kIF", "kUNLESS", "kTHEN", "kELSIF", "kELSE", "kCASE", "kWHEN", "kWHILE", "kUNTIL", "kFOR", "kBREAK", "kNEXT", "kREDO", "kRETRY", "kIN", "kDO", "kDO_COND", "kDO_BLOCK", "kDO_LAMBDA", "kRETURN", "kYIELD", "kSUPER", "kSELF", "kNIL", "kTRUE", "kFALSE", "kAND", "kOR", "kNOT", "kIF_MOD", "kUNLESS_MOD", "kWHILE_MOD", "kUNTIL_MOD", "kRESCUE_MOD", "kALIAS", "kDEFINED", "klBEGIN", "klEND", "k__LINE__", "k__FILE__", "k__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tLABEL", "tCVAR", "tNTH_REF", "tBACK_REF", "tSTRING_CONTENT", "tINTEGER", "tFLOAT", "tREGEXP_END", "tUPLUS", "tUMINUS", "tUMINUS_NUM", "tPOW", "tCMP", "tEQ", "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", "tDOT", "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN2", "tRPAREN", "tLPAREN_ARG", "tLBRACK", "tLBRACK2", "tRBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tSTAR2", "tAMPER", "tAMPER2", "tTILDE", "tPERCENT", "tDIVIDE", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tDSTAR", "tCHAR", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DEND", "tUBANG", "tRATIONAL", "tIMAGINARY", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "@1", "top_stmts", "opt_terms", "none", "top_stmt", "terms", "stmt", "bodystmt", "@2", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", "lhs", "mrhs", "mrhs_arg", "expr", "@3", "opt_nl", "arg", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "fcall", "@4", "@5", "operation", "call_args", "mlhs_basic", "mlhs_inner", "rparen", "mlhs_head", "mlhs_item", "mlhs_node", "mlhs_post", "user_variable", "keyword_variable", "cname", "cpath", "fname", "op", "reswords", "fsym", "symbol", "dsym", "@6", "simple_numeric", "primary", "arg_value", "aref_args", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@7", "literal", "strings", "xstring", "regexp", "words", "qwords", "symbols", "qsymbols", "var_ref", "assoc_list", "brace_block", "method_call", "lambda", "then", "if_tail", "do", "case_body", "for_var", "superclass", "term", "f_arglist", "singleton", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23", "@24", "@25", "@26", "@27", "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "f_marg", "f_norm_arg", "f_margs", "f_marg_list", "block_args_tail", "f_block_kwarg", "f_kwrest", "opt_f_block_arg", "f_block_arg", "opt_block_args_tail", "block_param", "f_arg", "f_block_optarg", "f_rest_arg", "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "f_bad_arg", "f_larglist", "lambda_body", "@28", "f_args", "do_block", "@29", "@30", "operation3", "@31", "@32", "@33", "@34", "@35", "cases", "@36", "exc_list", "exc_var", "numeric", "string", "string1", "string_contents", "xstring_contents", "regexp_contents", "word_list", "word", "string_content", "symbol_list", "qword_list", "qsym_list", "string_dvar", "@37", "@38", "sym", "@39", "args_tail", "f_kwarg", "opt_args_tail", "f_optarg", "f_arg_item", "f_label", "f_kw", "f_block_kw", "kwrest_mark", "f_opt", "f_block_opt", "restarg_mark", "blkarg_mark", "@40", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted def _reduce_1(val, _values, result) self.lexer.lex_state = :expr_beg result end def _reduce_2(val, _values, result) result = new_compstmt val result end def _reduce_3(val, _values, result) result = val[0] result end # reduce 4 omitted # reduce 5 omitted def _reduce_6(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = val[0] # TODO: remove once I have more confidence this is fixed # result.each_of_type :call_args do |s| # debug20 666, s, result # end result end def _reduce_9(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 1 yyerror "BEGIN in method" end self.env.extend result end def _reduce_10(val, _values, result) result = new_iter s(:preexe), nil, val[3] result end def _reduce_11(val, _values, result) result = new_body val result end def _reduce_12(val, _values, result) result = new_compstmt val result end # reduce 13 omitted # reduce 14 omitted def _reduce_15(val, _values, result) result = self.block_append val[0], val[2] result end def _reduce_16(val, _values, result) result = val[1] debug20 2, val, result result end def _reduce_17(val, _values, result) lexer.lex_state = :expr_fname result = self.lexer.lineno result end def _reduce_18(val, _values, result) result = s(:alias, val[1], val[3]).line(val[2]) result end def _reduce_19(val, _values, result) result = s(:valias, val[1].to_sym, val[2].to_sym) result end def _reduce_20(val, _values, result) result = s(:valias, val[1].to_sym, :"$#{val[2]}") result end def _reduce_21(val, _values, result) yyerror "can't make alias for the number variables" result end def _reduce_22(val, _values, result) result = val[1] result end def _reduce_23(val, _values, result) result = new_if val[2], val[0], nil result end def _reduce_24(val, _values, result) result = new_if val[2], nil, val[0] result end def _reduce_25(val, _values, result) result = new_while val[0], val[2], true result end def _reduce_26(val, _values, result) result = new_until val[0], val[2], true result end def _reduce_27(val, _values, result) result = s(:rescue, val[0], new_resbody(s(:array), val[2])) result end def _reduce_28(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] result end # reduce 29 omitted def _reduce_30(val, _values, result) result = new_masgn val[0], val[2], :wrap result end def _reduce_31(val, _values, result) result = new_op_asgn val result end def _reduce_32(val, _values, result) result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_33(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line result end def _reduce_34(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line result end def _reduce_35(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 4, val, result result end def _reduce_36(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 5, val, result result end def _reduce_37(val, _values, result) self.backref_assign_error val[0] result end def _reduce_38(val, _values, result) result = new_assign val[0], s(:svalue, val[2]) result end def _reduce_39(val, _values, result) result = new_masgn val[0], val[2] result end # reduce 40 omitted def _reduce_41(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_42(val, _values, result) result = new_assign val[0], val[2] result end # reduce 43 omitted def _reduce_44(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_45(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_46(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_47(val, _values, result) result = s(:call, val[1], :"!") result end # reduce 48 omitted def _reduce_49(val, _values, result) result = value_expr(val[0]) result end # reduce 50 omitted # reduce 51 omitted # reduce 52 omitted def _reduce_53(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_54(val, _values, result) self.env.extend(:dynamic) result = self.lexer.lineno result end def _reduce_55(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_56(val, _values, result) result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend result end def _reduce_57(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_58(val, _values, result) result = val[0].concat val[1].sexp_body # REFACTOR pattern result end def _reduce_59(val, _values, result) result = val[0].concat val[1].sexp_body if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end result end def _reduce_60(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_61(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] block_dup_check call, block block.insert 1, call result = block result end def _reduce_62(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_63(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block result end def _reduce_64(val, _values, result) result = new_super val[1] result end def _reduce_65(val, _values, result) result = new_yield val[1] result end def _reduce_66(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) result end def _reduce_67(val, _values, result) line = val[0].last result = s(:break, ret_args(val[1])).line(line) result end def _reduce_68(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) result end # reduce 69 omitted def _reduce_70(val, _values, result) result = val[1] result end # reduce 71 omitted def _reduce_72(val, _values, result) result = s(:masgn, s(:array, val[1])) result end def _reduce_73(val, _values, result) result = s(:masgn, val[0]) result end def _reduce_74(val, _values, result) result = s(:masgn, val[0] << val[1].compact) result end def _reduce_75(val, _values, result) result = s(:masgn, val[0] << s(:splat, val[2])) result end def _reduce_76(val, _values, result) ary1, _, splat, _, ary2 = val result = list_append ary1, s(:splat, splat) result.concat ary2.sexp_body result = s(:masgn, result) result end def _reduce_77(val, _values, result) result = s(:masgn, val[0] << s(:splat)) result end def _reduce_78(val, _values, result) ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_79(val, _values, result) result = s(:masgn, s(:array, s(:splat, val[1]))) result end def _reduce_80(val, _values, result) ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_81(val, _values, result) result = s(:masgn, s(:array, s(:splat))) result end def _reduce_82(val, _values, result) result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) result end # reduce 83 omitted def _reduce_84(val, _values, result) result = val[1] result end def _reduce_85(val, _values, result) result = s(:array, val[0]) result end def _reduce_86(val, _values, result) result = val[0] << val[1].compact result end def _reduce_87(val, _values, result) result = s(:array, val[0]) result end def _reduce_88(val, _values, result) result = list_append val[0], val[2] result end def _reduce_89(val, _values, result) result = self.assignable val[0] result end def _reduce_90(val, _values, result) result = self.assignable val[0] result end def _reduce_91(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_92(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_93(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_94(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_95(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) result end def _reduce_96(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) result end def _reduce_97(val, _values, result) self.backref_assign_error val[0] result end def _reduce_98(val, _values, result) result = self.assignable val[0] result end def _reduce_99(val, _values, result) result = self.assignable val[0] debug20 9, val, result result end def _reduce_100(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_101(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_102(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_103(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_104(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) result end def _reduce_105(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) result end def _reduce_106(val, _values, result) self.backref_assign_error val[0] result end def _reduce_107(val, _values, result) yyerror "class/module name must be CONSTANT" result end # reduce 108 omitted def _reduce_109(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_110(val, _values, result) result = val[0].to_sym result end def _reduce_111(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end # reduce 112 omitted # reduce 113 omitted # reduce 114 omitted def _reduce_115(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end def _reduce_116(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end # reduce 117 omitted # reduce 118 omitted def _reduce_119(val, _values, result) result = s(:lit, val[0].to_sym) result end # reduce 120 omitted def _reduce_121(val, _values, result) result = new_undef val[0] result end def _reduce_122(val, _values, result) lexer.lex_state = :expr_fname result end def _reduce_123(val, _values, result) result = new_undef val[0], val[3] result end # reduce 124 omitted # reduce 125 omitted # reduce 126 omitted # reduce 127 omitted # reduce 128 omitted # reduce 129 omitted # reduce 130 omitted # reduce 131 omitted # reduce 132 omitted # reduce 133 omitted # reduce 134 omitted # reduce 135 omitted # reduce 136 omitted # reduce 137 omitted # reduce 138 omitted # reduce 139 omitted # reduce 140 omitted # reduce 141 omitted # reduce 142 omitted # reduce 143 omitted # reduce 144 omitted # reduce 145 omitted # reduce 146 omitted # reduce 147 omitted # reduce 148 omitted # reduce 149 omitted # reduce 150 omitted # reduce 151 omitted # reduce 152 omitted # reduce 153 omitted # reduce 154 omitted # reduce 155 omitted # reduce 156 omitted # reduce 157 omitted # reduce 158 omitted # reduce 159 omitted # reduce 160 omitted # reduce 161 omitted # reduce 162 omitted # reduce 163 omitted # reduce 164 omitted # reduce 165 omitted # reduce 166 omitted # reduce 167 omitted # reduce 168 omitted # reduce 169 omitted # reduce 170 omitted # reduce 171 omitted # reduce 172 omitted # reduce 173 omitted # reduce 174 omitted # reduce 175 omitted # reduce 176 omitted # reduce 177 omitted # reduce 178 omitted # reduce 179 omitted # reduce 180 omitted # reduce 181 omitted # reduce 182 omitted # reduce 183 omitted # reduce 184 omitted # reduce 185 omitted # reduce 186 omitted # reduce 187 omitted # reduce 188 omitted # reduce 189 omitted # reduce 190 omitted # reduce 191 omitted # reduce 192 omitted # reduce 193 omitted # reduce 194 omitted def _reduce_195(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_196(val, _values, result) result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) result end def _reduce_197(val, _values, result) result = new_op_asgn val result end def _reduce_198(val, _values, result) result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) result end def _reduce_199(val, _values, result) val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_200(val, _values, result) result = new_op_asgn2 val result end def _reduce_201(val, _values, result) result = new_op_asgn2 val result end def _reduce_202(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) result end def _reduce_203(val, _values, result) yyerror "constant re-assignment" result end def _reduce_204(val, _values, result) yyerror "constant re-assignment" result end def _reduce_205(val, _values, result) self.backref_assign_error val[0] result end def _reduce_206(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end result end def _reduce_207(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end result end def _reduce_208(val, _values, result) result = new_call val[0], :+, argl(val[2]) result end def _reduce_209(val, _values, result) result = new_call val[0], :-, argl(val[2]) result end def _reduce_210(val, _values, result) result = new_call val[0], :*, argl(val[2]) result end def _reduce_211(val, _values, result) result = new_call val[0], :"/", argl(val[2]) result end def _reduce_212(val, _values, result) result = new_call val[0], :"%", argl(val[2]) result end def _reduce_213(val, _values, result) result = new_call val[0], :**, argl(val[2]) result end def _reduce_214(val, _values, result) result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") result end def _reduce_215(val, _values, result) result = new_call val[1], :"+@" result end def _reduce_216(val, _values, result) result = new_call val[1], :"-@" result end def _reduce_217(val, _values, result) result = new_call val[0], :"|", argl(val[2]) result end def _reduce_218(val, _values, result) result = new_call val[0], :"^", argl(val[2]) result end def _reduce_219(val, _values, result) result = new_call val[0], :"&", argl(val[2]) result end def _reduce_220(val, _values, result) result = new_call val[0], :"<=>", argl(val[2]) result end def _reduce_221(val, _values, result) result = new_call val[0], :">", argl(val[2]) result end def _reduce_222(val, _values, result) result = new_call val[0], :">=", argl(val[2]) result end def _reduce_223(val, _values, result) result = new_call val[0], :"<", argl(val[2]) result end def _reduce_224(val, _values, result) result = new_call val[0], :"<=", argl(val[2]) result end def _reduce_225(val, _values, result) result = new_call val[0], :"==", argl(val[2]) result end def _reduce_226(val, _values, result) result = new_call val[0], :"===", argl(val[2]) result end def _reduce_227(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) result end def _reduce_228(val, _values, result) result = new_match val[0], val[2] result end def _reduce_229(val, _values, result) result = s(:not, new_match(val[0], val[2])) result end def _reduce_230(val, _values, result) result = new_call val[1], :"!" result end def _reduce_231(val, _values, result) result = new_call value_expr(val[1]), :"~" result end def _reduce_232(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) result end def _reduce_233(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) result end def _reduce_234(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_235(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_236(val, _values, result) result = s(:defined, val[2]) result end def _reduce_237(val, _values, result) result = s(:if, val[0], val[2], val[5]) result end # reduce 238 omitted def _reduce_239(val, _values, result) result = value_expr(val[0]) result end # reduce 240 omitted def _reduce_241(val, _values, result) result = args [val[0]] result end def _reduce_242(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_243(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_244(val, _values, result) result = val[1] result end # reduce 245 omitted # reduce 246 omitted def _reduce_247(val, _values, result) result = val[0] result end def _reduce_248(val, _values, result) result = val[0] result end def _reduce_249(val, _values, result) result = args val result end def _reduce_250(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_251(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_252(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val result end def _reduce_253(val, _values, result) result = call_args val result = self.arg_blk_pass val[0], val[1] result end def _reduce_254(val, _values, result) result = call_args [array_to_hash(val[0])] result = self.arg_blk_pass result, val[1] result end def _reduce_255(val, _values, result) result = call_args [val[0], array_to_hash(val[2])] result = self.arg_blk_pass result, val[3] result end def _reduce_256(val, _values, result) result = call_args val result end def _reduce_257(val, _values, result) result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true result end def _reduce_258(val, _values, result) lexer.cmdarg.stack.replace val[0] result = val[1] result end def _reduce_259(val, _values, result) result = s(:block_pass, val[1]) result end def _reduce_260(val, _values, result) result = val[1] result end # reduce 261 omitted def _reduce_262(val, _values, result) result = s(:array, val[0]) result end def _reduce_263(val, _values, result) result = s(:array, s(:splat, val[1])) result end def _reduce_264(val, _values, result) result = self.list_append val[0], val[2] result end def _reduce_265(val, _values, result) result = self.list_append val[0], s(:splat, val[3]) result end def _reduce_266(val, _values, result) result = new_masgn_arg val[0] result end def _reduce_267(val, _values, result) result = new_masgn_arg val[0], :wrap result end def _reduce_268(val, _values, result) result = val[0] << val[2] result end def _reduce_269(val, _values, result) result = self.arg_concat val[0], val[3] result end def _reduce_270(val, _values, result) result = s(:splat, val[1]) result end # reduce 271 omitted # reduce 272 omitted # reduce 273 omitted # reduce 274 omitted # reduce 275 omitted # reduce 276 omitted # reduce 277 omitted # reduce 278 omitted # reduce 279 omitted # reduce 280 omitted def _reduce_281(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_282(val, _values, result) result = self.lexer.lineno result end def _reduce_283(val, _values, result) unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] result end def _reduce_284(val, _values, result) debug20 13, val, result result end def _reduce_285(val, _values, result) result = self.lexer.cmdarg.stack.dup lexer.cmdarg.stack.replace [false] # TODO add api for these result end def _reduce_286(val, _values, result) lexer.lex_state = :expr_endarg result end def _reduce_287(val, _values, result) warning "(...) interpreted as grouped expression" lexer.cmdarg.stack.replace val[1] result = val[2] result end def _reduce_288(val, _values, result) result = val[1] || s(:nil) result.paren = true result end def _reduce_289(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end def _reduce_290(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_291(val, _values, result) result = val[1] || s(:array) result.sexp_type = :array # aref_args is :args result end def _reduce_292(val, _values, result) result = self.lexer.lineno result end def _reduce_293(val, _values, result) result = new_hash val result end def _reduce_294(val, _values, result) result = s(:return) result end def _reduce_295(val, _values, result) result = new_yield val[2] result end def _reduce_296(val, _values, result) result = new_yield result end def _reduce_297(val, _values, result) result = new_yield result end def _reduce_298(val, _values, result) result = s(:defined, val[3]) result end def _reduce_299(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_300(val, _values, result) debug20 14, val, result result end def _reduce_301(val, _values, result) oper, iter = val[0], val[1] call = oper # FIX iter.insert 1, call result = iter call.line = iter.line result end # reduce 302 omitted def _reduce_303(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter result end def _reduce_304(val, _values, result) result = val[1] # TODO: fix lineno result end def _reduce_305(val, _values, result) result = new_if val[1], val[3], val[4] result end def _reduce_306(val, _values, result) result = new_if val[1], val[4], val[3] result end def _reduce_307(val, _values, result) lexer.cond.push true result end def _reduce_308(val, _values, result) lexer.cond.pop result end def _reduce_309(val, _values, result) result = new_while val[5], val[2], true result end def _reduce_310(val, _values, result) lexer.cond.push true result end def _reduce_311(val, _values, result) lexer.cond.pop result end def _reduce_312(val, _values, result) result = new_until val[5], val[2], true result end def _reduce_313(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_314(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_315(val, _values, result) lexer.cond.push true result end def _reduce_316(val, _values, result) lexer.cond.pop result end def _reduce_317(val, _values, result) result = new_for val[4], val[1], val[7] result end def _reduce_318(val, _values, result) result = self.lexer.lineno result end def _reduce_319(val, _values, result) self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend result end def _reduce_320(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_321(val, _values, result) result = self.lexer.lineno result end def _reduce_322(val, _values, result) result = self.in_def self.in_def = false result end def _reduce_323(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend result end def _reduce_324(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_325(val, _values, result) result = self.lexer.lineno result end def _reduce_326(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend result end def _reduce_327(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_328(val, _values, result) result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend # TODO: local->cmdargs = cmdarg_stack; # TODO: port local_push_gen and local_pop_gen lexer.cmdarg.stack.replace [false] result end def _reduce_329(val, _values, result) in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body result end def _reduce_330(val, _values, result) self.comments.push self.lexer.comments lexer.lex_state = :expr_fname result end def _reduce_331(val, _values, result) self.in_single += 1 self.env.extend lexer.lex_state = :expr_endfn # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] result end def _reduce_332(val, _values, result) line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body result end def _reduce_333(val, _values, result) result = s(:break) result end def _reduce_334(val, _values, result) result = s(:next) result end def _reduce_335(val, _values, result) result = s(:redo) result end def _reduce_336(val, _values, result) result = s(:retry) result end def _reduce_337(val, _values, result) result = value_expr(val[0]) result end # reduce 338 omitted # reduce 339 omitted # reduce 340 omitted # reduce 341 omitted # reduce 342 omitted # reduce 343 omitted # reduce 344 omitted # reduce 345 omitted # reduce 346 omitted # reduce 347 omitted # reduce 348 omitted # reduce 349 omitted # reduce 350 omitted # reduce 351 omitted # reduce 352 omitted # reduce 353 omitted # reduce 354 omitted def _reduce_355(val, _values, result) result = s(:if, val[1], val[3], val[4]) result end # reduce 356 omitted def _reduce_357(val, _values, result) result = val[1] result end # reduce 358 omitted def _reduce_359(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end # reduce 360 omitted def _reduce_361(val, _values, result) result = val[1] result end def _reduce_362(val, _values, result) result = s(:array, val[0]) result end def _reduce_363(val, _values, result) result = list_append val[0], val[2] result end def _reduce_364(val, _values, result) args, = val result = block_var args result end def _reduce_365(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym result end def _reduce_366(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 result end def _reduce_367(val, _values, result) args, _, _ = val result = block_var args, :* result end def _reduce_368(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 result end def _reduce_369(val, _values, result) _, splat = val result = block_var :"*#{splat}" result end def _reduce_370(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args result end def _reduce_371(val, _values, result) result = block_var :* result end def _reduce_372(val, _values, result) _, _, args = val result = block_var :*, args result end def _reduce_373(val, _values, result) result = call_args val result end def _reduce_374(val, _values, result) result = call_args val result end def _reduce_375(val, _values, result) result = call_args val result end def _reduce_376(val, _values, result) result = call_args val result end def _reduce_377(val, _values, result) result = args val result end # reduce 378 omitted def _reduce_379(val, _values, result) result = args val result end def _reduce_380(val, _values, result) result = args val result end def _reduce_381(val, _values, result) result = args val result end def _reduce_382(val, _values, result) result = args val result end def _reduce_383(val, _values, result) result = args val result end def _reduce_384(val, _values, result) result = args val result end def _reduce_385(val, _values, result) result = args val result end def _reduce_386(val, _values, result) result = args val result end def _reduce_387(val, _values, result) result = args val result end def _reduce_388(val, _values, result) result = args val result end def _reduce_389(val, _values, result) result = args val result end def _reduce_390(val, _values, result) result = args val result end def _reduce_391(val, _values, result) result = args val result end def _reduce_392(val, _values, result) result = args val result end def _reduce_393(val, _values, result) result = args val result end def _reduce_394(val, _values, result) result = 0 result end # reduce 395 omitted def _reduce_396(val, _values, result) result = args val result end def _reduce_397(val, _values, result) self.lexer.command_start = true result = s(:args) result end def _reduce_398(val, _values, result) result = args val result end # reduce 399 omitted def _reduce_400(val, _values, result) result = args val result end def _reduce_401(val, _values, result) result = args val result end def _reduce_402(val, _values, result) result = args val result end def _reduce_403(val, _values, result) result = s(:shadow, val[0].to_sym) result end # reduce 404 omitted def _reduce_405(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest result end def _reduce_406(val, _values, result) lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body self.env.unextend result end def _reduce_407(val, _values, result) result = args val result end def _reduce_408(val, _values, result) result = val[0] result = 0 if result == s(:args) result end def _reduce_409(val, _values, result) result = val[1] result end def _reduce_410(val, _values, result) result = val[1] result end def _reduce_411(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_412(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_413(val, _values, result) args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend result end def _reduce_414(val, _values, result) # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] result end def _reduce_415(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_416(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 result end def _reduce_417(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 result end def _reduce_418(val, _values, result) result = self.lexer.lineno result end def _reduce_419(val, _values, result) args = self.call_args val[2..-1] result = val[0].concat args.sexp_body result end def _reduce_420(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_421(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_422(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_423(val, _values, result) result = new_call val[0], :call, val[2], val[1] result end def _reduce_424(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_425(val, _values, result) result = new_super val[1] result end def _reduce_426(val, _values, result) result = s(:zsuper) result end def _reduce_427(val, _values, result) result = new_aref val result end def _reduce_428(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_429(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_430(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_431(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_432(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_433(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_434(val, _values, result) result = self.lexer.lineno result end def _reduce_435(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] result end # reduce 436 omitted # reduce 437 omitted def _reduce_438(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above result end def _reduce_439(val, _values, result) result = nil result end def _reduce_440(val, _values, result) result = s(:array, val[0]) result end # reduce 441 omitted # reduce 442 omitted def _reduce_443(val, _values, result) result = val[1] result end # reduce 444 omitted def _reduce_445(val, _values, result) _, body = val result = body || s(:nil) result end # reduce 446 omitted def _reduce_447(val, _values, result) result = s(:lit, val[0]) result end def _reduce_448(val, _values, result) result = s(:lit, val[0]) result end # reduce 449 omitted def _reduce_450(val, _values, result) val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] result end def _reduce_451(val, _values, result) debug20 23, val, result result end # reduce 452 omitted def _reduce_453(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_454(val, _values, result) result = val[1] result end def _reduce_455(val, _values, result) result = new_string val result end def _reduce_456(val, _values, result) result = new_xstring val[1] result end def _reduce_457(val, _values, result) result = new_regexp val result end def _reduce_458(val, _values, result) result = s(:array) result end def _reduce_459(val, _values, result) result = val[1] result end def _reduce_460(val, _values, result) result = new_word_list result end def _reduce_461(val, _values, result) result = val[0].dup << new_word_list_entry(val) result end # reduce 462 omitted def _reduce_463(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_464(val, _values, result) result = s(:array) result end def _reduce_465(val, _values, result) result = val[1] result end def _reduce_466(val, _values, result) result = new_symbol_list result end def _reduce_467(val, _values, result) result = val[0].dup << new_symbol_list_entry(val) result end def _reduce_468(val, _values, result) result = s(:array) result end def _reduce_469(val, _values, result) result = val[1] result end def _reduce_470(val, _values, result) result = s(:array) result end def _reduce_471(val, _values, result) result = val[1] result end def _reduce_472(val, _values, result) result = new_qword_list result end def _reduce_473(val, _values, result) result = val[0].dup << new_qword_list_entry(val) result end def _reduce_474(val, _values, result) result = new_qsym_list result end def _reduce_475(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) result end def _reduce_476(val, _values, result) result = s(:str, "") result end def _reduce_477(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_478(val, _values, result) result = nil result end def _reduce_479(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_480(val, _values, result) result = nil result end def _reduce_481(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_482(val, _values, result) result = new_string val result end def _reduce_483(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg # TODO: expr_value ? result end def _reduce_484(val, _values, result) lexer.lex_strterm = val[1] result = s(:evstr, val[2]) result end def _reduce_485(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store, lexer.lex_state, ] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_value result end def _reduce_486(val, _values, result) # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg lexer.lex_state = oldlex_state case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else debug20 25 raise "unknown string body: #{stmt.inspect}" end result end def _reduce_487(val, _values, result) result = s(:gvar, val[0].to_sym) result end def _reduce_488(val, _values, result) result = s(:ivar, val[0].to_sym) result end def _reduce_489(val, _values, result) result = s(:cvar, val[0].to_sym) result end # reduce 490 omitted def _reduce_491(val, _values, result) lexer.lex_state = :expr_end result = val[1].to_sym result end def _reduce_492(val, _values, result) result = val[0].to_sym result end # reduce 493 omitted # reduce 494 omitted # reduce 495 omitted # reduce 496 omitted def _reduce_497(val, _values, result) lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) when :evstr then result = s(:dsym, "", result) else debug20 26, val, result end result end # reduce 498 omitted def _reduce_499(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 500 omitted # reduce 501 omitted # reduce 502 omitted # reduce 503 omitted # reduce 504 omitted # reduce 505 omitted # reduce 506 omitted # reduce 507 omitted # reduce 508 omitted def _reduce_509(val, _values, result) result = s(:nil) result end def _reduce_510(val, _values, result) result = s(:self) result end def _reduce_511(val, _values, result) result = s(:true) result end def _reduce_512(val, _values, result) result = s(:false) result end def _reduce_513(val, _values, result) result = s(:str, self.file) result end def _reduce_514(val, _values, result) result = s(:lit, lexer.lineno) result end def _reduce_515(val, _values, result) result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end result end def _reduce_516(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_517(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_518(val, _values, result) result = self.assignable val[0] result end def _reduce_519(val, _values, result) result = self.assignable val[0] debug20 29, val, result result end def _reduce_520(val, _values, result) result = s(:nth_ref, val[0]) result end def _reduce_521(val, _values, result) result = s(:back_ref, val[0]) result end def _reduce_522(val, _values, result) result = nil result end def _reduce_523(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_524(val, _values, result) result = val[2] result end def _reduce_525(val, _values, result) yyerrok result = nil debug20 30, val, result result end def _reduce_526(val, _values, result) result = val[1] self.lexer.lex_state = :expr_beg self.lexer.command_start = true # TODO: # $$ = parser->parser_in_kwarg; # parser->parser_in_kwarg = 1; result end def _reduce_527(val, _values, result) # TODO: parser->parser_in_kwarg = $1; result = val[0] self.lexer.lex_state = :expr_beg self.lexer.command_start = true result end def _reduce_528(val, _values, result) result = args val result end def _reduce_529(val, _values, result) result = args val result end def _reduce_530(val, _values, result) result = args val result end # reduce 531 omitted def _reduce_532(val, _values, result) result = val[1] result end def _reduce_533(val, _values, result) result = nil result end def _reduce_534(val, _values, result) result = args val result end def _reduce_535(val, _values, result) result = args val result end def _reduce_536(val, _values, result) result = args val result end def _reduce_537(val, _values, result) result = args val result end def _reduce_538(val, _values, result) result = args val result end def _reduce_539(val, _values, result) result = args val result end def _reduce_540(val, _values, result) result = args val result end def _reduce_541(val, _values, result) result = args val result end def _reduce_542(val, _values, result) result = args val result end def _reduce_543(val, _values, result) result = args val result end def _reduce_544(val, _values, result) result = args val result end def _reduce_545(val, _values, result) result = args val result end def _reduce_546(val, _values, result) result = args val result end def _reduce_547(val, _values, result) result = args val result end def _reduce_548(val, _values, result) result = args val result end def _reduce_549(val, _values, result) yyerror "formal argument cannot be a constant" result end def _reduce_550(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_551(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_552(val, _values, result) yyerror "formal argument cannot be a class variable" result end # reduce 553 omitted def _reduce_554(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier result end # reduce 555 omitted def _reduce_556(val, _values, result) result = val[1] result end def _reduce_557(val, _values, result) case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end result end def _reduce_558(val, _values, result) list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item result end # reduce 559 omitted def _reduce_560(val, _values, result) # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) result end def _reduce_561(val, _values, result) label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) result end def _reduce_562(val, _values, result) # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) result end def _reduce_563(val, _values, result) label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) result end # reduce 564 omitted def _reduce_565(val, _values, result) list, _, item = val result = list << item.last result end # reduce 566 omitted def _reduce_567(val, _values, result) result = args val result end # reduce 568 omitted # reduce 569 omitted def _reduce_570(val, _values, result) result = :"**#{val[1]}" result end def _reduce_571(val, _values, result) result = :"**" result end def _reduce_572(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_573(val, _values, result) result = self.assignable val[0], val[2] result end def _reduce_574(val, _values, result) result = s(:block, val[0]) result end def _reduce_575(val, _values, result) result = val[0] result << val[2] result end def _reduce_576(val, _values, result) result = s(:block, val[0]) result end def _reduce_577(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 578 omitted # reduce 579 omitted def _reduce_580(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" result end def _reduce_581(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 582 omitted # reduce 583 omitted def _reduce_584(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym result end def _reduce_585(val, _values, result) result = val[1] result end def _reduce_586(val, _values, result) result = nil result end # reduce 587 omitted def _reduce_588(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_589(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit result end def _reduce_590(val, _values, result) result = s(:array) result end def _reduce_591(val, _values, result) result = val[0] result end # reduce 592 omitted def _reduce_593(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash result end def _reduce_594(val, _values, result) result = s(:array, val[0], val[2]) result end def _reduce_595(val, _values, result) result = s(:array, s(:lit, val[0][0].to_sym), val.last) result end def _reduce_596(val, _values, result) result = s(:array, s(:kwsplat, val[1])) result end # reduce 597 omitted # reduce 598 omitted # reduce 599 omitted # reduce 600 omitted # reduce 601 omitted # reduce 602 omitted # reduce 603 omitted # reduce 604 omitted # reduce 605 omitted # reduce 606 omitted # reduce 607 omitted # reduce 608 omitted # reduce 609 omitted # reduce 610 omitted # reduce 611 omitted # reduce 612 omitted # reduce 613 omitted # reduce 614 omitted # reduce 615 omitted # reduce 616 omitted # reduce 617 omitted # reduce 618 omitted def _reduce_619(val, _values, result) yyerrok result end # reduce 620 omitted # reduce 621 omitted def _reduce_622(val, _values, result) yyerrok result end def _reduce_623(val, _values, result) result = nil; result end def _reduce_none(val, _values, result) val[0] end end # class Ruby21Parser ruby_parser-3.11.0/lib/ruby_parser.rb0000444000004100000410000000356713277753330017634 0ustar www-datawww-datarequire "ruby_parser_extras" require "racc/parser" ## # RubyParser is a compound parser that uses all known versions to # attempt to parse. class RubyParser VERSIONS = [] class Parser < Racc::Parser include RubyParserStuff def self.inherited x RubyParser::VERSIONS << x end def self.version Parser > self and self.name[/(?:V|Ruby)(\d+)/, 1].to_i end end class SyntaxError < RuntimeError; end def process s, f = "(string)", t = 10 e = nil VERSIONS.each do |klass| parser = klass.new begin return parser.process s, f, t rescue Racc::ParseError, RubyParser::SyntaxError => exc e = exc end end raise e end alias :parse :process def reset # do nothing end def self.latest VERSIONS.first.new end def self.for_current_ruby name = "V#{RUBY_VERSION[/^\d+\.\d+/].delete "."}" klass = if const_defined? name then const_get name else latest = VERSIONS.first warn "NOTE: RubyParser::#{name} undefined, using #{latest}." latest end klass.new end end ## # Unfortunately a problem with racc is that it won't let me namespace # properly, so instead of RubyParser::V18, I still have to generate # the old Ruby23Parser and shove it in as V23. require "ruby18_parser" require "ruby19_parser" require "ruby20_parser" require "ruby21_parser" require "ruby22_parser" require "ruby23_parser" require "ruby24_parser" require "ruby25_parser" class RubyParser # HACK VERSIONS.clear # also a HACK caused by racc namespace issues class V25 < ::Ruby25Parser; end class V24 < ::Ruby24Parser; end class V23 < ::Ruby23Parser; end class V22 < ::Ruby22Parser; end class V21 < ::Ruby21Parser; end class V20 < ::Ruby20Parser; end class V19 < ::Ruby19Parser; end class V18 < ::Ruby18Parser; end end ruby_parser-3.11.0/lib/ruby25_parser.y0000644000004100000410000023352013277753330017644 0ustar www-datawww-data# -*- racc -*- class Ruby25Parser token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__ k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG tRATIONAL tIMAGINARY tLABEL_END tLONELY prechigh right tBANG tTILDE tUPLUS right tPOW right tUMINUS_NUM tUMINUS left tSTAR2 tDIVIDE tPERCENT left tPLUS tMINUS left tLSHFT tRSHFT left tAMPER2 left tPIPE tCARET left tGT tGEQ tLT tLEQ nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH left tANDOP left tOROP nonassoc tDOT2 tDOT3 right tEH tCOLON left kRESCUE_MOD right tEQL tOP_ASGN nonassoc kDEFINED right kNOT left kOR kAND nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD nonassoc tLBRACE_ARG nonassoc tLOWEST preclow rule program: { self.lexer.lex_state = :expr_beg } top_compstmt { result = new_compstmt val } top_compstmt: top_stmts opt_terms { result = val[0] } top_stmts: none | top_stmt | top_stmts terms top_stmt { result = self.block_append val[0], val[2] } | error top_stmt top_stmt: stmt { result = val[0] # TODO: remove once I have more confidence this is fixed # result.each_of_type :call_args do |s| # debug20 666, s, result # end } | klBEGIN { if (self.in_def || self.in_single > 0) then debug20 1 yyerror "BEGIN in method" end self.env.extend } tLCURLY top_compstmt tRCURLY { result = new_iter s(:preexe), nil, val[3] } bodystmt: compstmt opt_rescue opt_else opt_ensure { result = new_body val } compstmt: stmts opt_terms { result = new_compstmt val } stmts: none | stmt | stmts terms stmt { result = self.block_append val[0], val[2] } | error stmt { result = val[1] debug20 2, val, result } stmt: kALIAS fitem { lexer.lex_state = :expr_fname result = self.lexer.lineno } fitem { result = s(:alias, val[1], val[3]).line(val[2]) } | kALIAS tGVAR tGVAR { result = s(:valias, val[1].to_sym, val[2].to_sym) } | kALIAS tGVAR tBACK_REF { result = s(:valias, val[1].to_sym, :"$#{val[2]}") } | kALIAS tGVAR tNTH_REF { yyerror "can't make alias for the number variables" } | kUNDEF undef_list { result = val[1] } | stmt kIF_MOD expr_value { result = new_if val[2], val[0], nil } | stmt kUNLESS_MOD expr_value { result = new_if val[2], nil, val[0] } | stmt kWHILE_MOD expr_value { result = new_while val[0], val[2], true } | stmt kUNTIL_MOD expr_value { result = new_until val[0], val[2], true } | stmt kRESCUE_MOD stmt { result = s(:rescue, val[0], new_resbody(s(:array), val[2])) } | klEND tLCURLY compstmt tRCURLY { if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } | var_lhs tOP_ASGN command_call { result = new_op_asgn val } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value call_op tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 4, val, result } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 5, val, result } | backref tOP_ASGN command_call { self.backref_assign_error val[0] } | lhs tEQL mrhs { result = new_assign val[0], s(:svalue, val[2]) } | mlhs tEQL mrhs_arg { result = new_masgn val[0], val[2] } | expr command_asgn: lhs tEQL command_call { result = new_assign val[0], val[2] } | lhs tEQL command_asgn { result = new_assign val[0], val[2] } expr: command_call | expr kAND expr { result = logical_op :and, val[0], val[2] } | expr kOR expr { result = logical_op :or, val[0], val[2] } | kNOT opt_nl expr { result = s(:call, val[2], :"!") } | tBANG command_call { result = s(:call, val[1], :"!") } | arg expr_value: expr { result = value_expr(val[0]) } command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = new_call val[0], val[2].to_sym, val[3] } cmd_brace_block: tLBRACE_ARG { self.env.extend(:dynamic) result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend } fcall: operation { result = new_call nil, val[0].to_sym } command: fcall command_args =tLOWEST { result = val[0].concat val[1].sexp_body # REFACTOR pattern } | fcall command_args cmd_brace_block { result = val[0].concat val[1].sexp_body if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value call_op operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] block_dup_check call, block block.insert 1, call result = block } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block } | kSUPER command_args { result = new_super val[1] } | kYIELD command_args { result = new_yield val[1] } | kRETURN call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { line = val[0].last result = s(:break, ret_args(val[1])).line(line) } | kNEXT call_args { line = val[0].last result = s(:next, ret_args(val[1])).line(line) } mlhs: mlhs_basic | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { result = s(:masgn, s(:array, val[1])) } mlhs_basic: mlhs_head { result = s(:masgn, val[0]) } | mlhs_head mlhs_item { result = s(:masgn, val[0] << val[1].compact) } | mlhs_head tSTAR mlhs_node { result = s(:masgn, val[0] << s(:splat, val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val result = list_append ary1, s(:splat, splat) result.concat ary2.sexp_body result = s(:masgn, result) } | mlhs_head tSTAR { result = s(:masgn, val[0] << s(:splat)) } | mlhs_head tSTAR tCOMMA mlhs_post { ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR mlhs_node { result = s(:masgn, s(:array, s(:splat, val[1]))) } | tSTAR mlhs_node tCOMMA mlhs_post { ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR { result = s(:masgn, s(:array, s(:splat))) } | tSTAR tCOMMA mlhs_post { result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_head: mlhs_item tCOMMA { result = s(:array, val[0]) } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1].compact } mlhs_post: mlhs_item { result = s(:array, val[0]) } | mlhs_post tCOMMA mlhs_item { result = list_append val[0], val[2] } mlhs_node: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER # REFACTOR { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT # REFACTOR? { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } cname: tIDENTIFIER { yyerror "class/module name must be CONSTANT" } | tCONSTANT cpath: tCOLON3 cname { result = s(:colon3, val[1].to_sym) } | cname { result = val[0].to_sym } | primary_value tCOLON2 cname { result = s(:colon2, val[0], val[2].to_sym) } fname: tIDENTIFIER | tCONSTANT | tFID | op { lexer.lex_state = :expr_end result = val[0] } | reswords { lexer.lex_state = :expr_end result = val[0] } fsym: fname | symbol fitem: fsym { result = s(:lit, val[0].to_sym) } | dsym undef_list: fitem { result = new_undef val[0] } | undef_list tCOMMA { lexer.lex_state = :expr_fname } fitem { result = new_undef val[0], val[3] } op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE | kCLASS | kDEF | kDEFINED | kDO | kELSE | kELSIF | kEND | kENSURE | kFALSE | kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT | kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL arg: lhs tEQL arg { result = new_assign val[0], val[2] } | lhs tEQL arg kRESCUE_MOD arg { result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) } | var_lhs tOP_ASGN arg { result = new_op_asgn val } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN arg { result = new_op_asgn2 val } | primary_value call_op tCONSTANT tOP_ASGN arg { result = new_op_asgn2 val } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | tCOLON3 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | backref tOP_ASGN arg { self.backref_assign_error val[0] } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end } | arg tPLUS arg { result = new_call val[0], :+, argl(val[2]) } | arg tMINUS arg { result = new_call val[0], :-, argl(val[2]) } | arg tSTAR2 arg # TODO: rename { result = new_call val[0], :*, argl(val[2]) } | arg tDIVIDE arg { result = new_call val[0], :"/", argl(val[2]) } | arg tPERCENT arg { result = new_call val[0], :"%", argl(val[2]) } | arg tPOW arg { result = new_call val[0], :**, argl(val[2]) } | tUMINUS_NUM simple_numeric tPOW arg { result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") } | tUPLUS arg { result = new_call val[1], :"+@" } | tUMINUS arg { result = new_call val[1], :"-@" } | arg tPIPE arg { result = new_call val[0], :"|", argl(val[2]) } | arg tCARET arg { result = new_call val[0], :"^", argl(val[2]) } | arg tAMPER2 arg { result = new_call val[0], :"&", argl(val[2]) } | arg tCMP arg { result = new_call val[0], :"<=>", argl(val[2]) } | arg tGT arg { result = new_call val[0], :">", argl(val[2]) } | arg tGEQ arg { result = new_call val[0], :">=", argl(val[2]) } | arg tLT arg { result = new_call val[0], :"<", argl(val[2]) } | arg tLEQ arg { result = new_call val[0], :"<=", argl(val[2]) } | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) } | arg tEQQ arg { result = new_call val[0], :"===", argl(val[2]) } | arg tNEQ arg { result = new_call val[0], :"!=", argl(val[2]) } | arg tMATCH arg { result = new_match val[0], val[2] } | arg tNMATCH arg { result = s(:not, new_match(val[0], val[2])) } | tBANG arg { result = new_call val[1], :"!" } | tTILDE arg { result = new_call value_expr(val[1]), :"~" } | arg tLSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) } | arg tRSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) } | arg tANDOP arg { result = logical_op :and, val[0], val[2] } | arg tOROP arg { result = logical_op :or, val[0], val[2] } | kDEFINED opt_nl arg { result = s(:defined, val[2]) } | arg tEH arg opt_nl tCOLON arg { result = s(:if, val[0], val[2], val[5]) } | primary arg_value: arg { result = value_expr(val[0]) } aref_args: none | args trailer { result = args [val[0]] } | args tCOMMA assocs trailer { result = args [val[0], array_to_hash(val[2])] } | assocs trailer { result = args [array_to_hash(val[0])] } paren_args: tLPAREN2 opt_call_args rparen { result = val[1] } opt_paren_args: none | paren_args opt_call_args: none { result = val[0] } | call_args { result = val[0] } | args tCOMMA { result = args val } | args tCOMMA assocs tCOMMA { result = args [val[0], array_to_hash(val[2])] } | assocs tCOMMA { result = args [array_to_hash(val[0])] } call_args: command { warning "parenthesize argument(s) for future version" result = call_args val } | args opt_block_arg { result = call_args val result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { result = call_args [array_to_hash(val[0])] result = self.arg_blk_pass result, val[1] } | args tCOMMA assocs opt_block_arg { result = call_args [val[0], array_to_hash(val[2])] result = self.arg_blk_pass result, val[3] } | block_arg { result = call_args val } command_args: { result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true } call_args { lexer.cmdarg.stack.replace val[0] result = val[1] } block_arg: tAMPER arg_value { result = s(:block_pass, val[1]) } opt_block_arg: tCOMMA block_arg { result = val[1] } | none args: arg_value { result = s(:array, val[0]) } | tSTAR arg_value { result = s(:array, s(:splat, val[1])) } | args tCOMMA arg_value { result = self.list_append val[0], val[2] } | args tCOMMA tSTAR arg_value { result = self.list_append val[0], s(:splat, val[3]) } mrhs_arg: mrhs { result = new_masgn_arg val[0] } | arg_value { result = new_masgn_arg val[0], :wrap } mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = self.arg_concat val[0], val[3] } | tSTAR arg_value { result = s(:splat, val[1]) } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = new_call nil, val[0].to_sym } | kBEGIN { result = self.lexer.lineno } bodystmt kEND { unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] } | tLPAREN_ARG rparen { debug20 13, val, result } | tLPAREN_ARG { result = self.lexer.cmdarg.stack.dup lexer.cmdarg.stack.replace [false] # TODO add api for these } expr { lexer.lex_state = :expr_endarg } rparen { warning "(...) interpreted as grouped expression" lexer.cmdarg.stack.replace val[1] result = val[2] } | tLPAREN compstmt tRPAREN { result = val[1] || s(:nil) result.paren = true } | primary_value tCOLON2 tCONSTANT { result = s(:colon2, val[0], val[2].to_sym) } | tCOLON3 tCONSTANT { result = s(:colon3, val[1].to_sym) } | tLBRACK aref_args tRBRACK { result = val[1] || s(:array) result.sexp_type = :array # aref_args is :args } | tLBRACE { result = self.lexer.lineno } assoc_list tRCURLY { result = new_hash val } | kRETURN { result = s(:return) } | kYIELD tLPAREN2 call_args rparen { result = new_yield val[2] } | kYIELD tLPAREN2 rparen { result = new_yield } | kYIELD { result = new_yield } | kDEFINED opt_nl tLPAREN2 expr rparen { result = s(:defined, val[3]) } | kNOT tLPAREN2 expr rparen { result = s(:call, val[2], :"!") } | kNOT tLPAREN2 rparen { debug20 14, val, result } | fcall brace_block { oper, iter = val[0], val[1] call = oper # FIX iter.insert 1, call result = iter call.line = iter.line } | method_call | method_call brace_block { call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter } | tLAMBDA lambda { result = val[1] # TODO: fix lineno } | kIF expr_value then compstmt if_tail kEND { result = new_if val[1], val[3], val[4] } | kUNLESS expr_value then compstmt opt_else kEND { result = new_if val[1], val[4], val[3] } | kWHILE { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_while val[5], val[2], true } | kUNTIL { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_until val[5], val[2], true } | kCASE expr_value opt_terms case_body kEND { (_, line), expr, _, body, _ = val result = new_case expr, body, line } | kCASE opt_terms case_body kEND { (_, line), _, body, _ = val result = new_case nil, body, line } | kFOR for_var kIN { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_for val[4], val[1], val[7] } | kCLASS { result = self.lexer.lineno } cpath superclass { self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend } bodystmt kEND { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kCLASS tLSHFT { result = self.lexer.lineno } expr { result = self.in_def self.in_def = false } term { result = self.in_single self.in_single = 0 self.env.extend } bodystmt kEND { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kMODULE { result = self.lexer.lineno } cpath { self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend } bodystmt kEND { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kDEF fname { result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend # TODO: local->cmdargs = cmdarg_stack; # TODO: port local_push_gen and local_pop_gen lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body } | kDEF singleton dot_or_colon { self.comments.push self.lexer.comments lexer.lex_state = :expr_fname } fname { self.in_single += 1 self.env.extend lexer.lex_state = :expr_endfn # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body } | kBREAK { result = s(:break) } | kNEXT { result = s(:next) } | kREDO { result = s(:redo) } | kRETRY { result = s(:retry) } primary_value: primary { result = value_expr(val[0]) } # These are really stupid k_begin: kBEGIN k_if: kIF k_unless: kUNLESS k_while: kWHILE k_until: kUNTIL k_case: kCASE k_for: kFOR k_class: kCLASS k_module: kMODULE k_def: kDEF k_end: kEND then: term | kTHEN | term kTHEN do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { result = s(:if, val[1], val[3], val[4]) } opt_else: none | kELSE compstmt { result = val[1] } for_var: lhs | mlhs { val[0].delete_at 1 if val[0][1].nil? # HACK } f_marg: f_norm_arg | tLPAREN f_margs rparen { result = val[1] } f_marg_list: f_marg { result = s(:array, val[0]) } | f_marg_list tCOMMA f_marg { result = list_append val[0], val[2] } f_margs: f_marg_list { args, = val result = block_var args } | f_marg_list tCOMMA tSTAR f_norm_arg { args, _, _, splat = val result = block_var args, "*#{splat}".to_sym } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 } | f_marg_list tCOMMA tSTAR { args, _, _ = val result = block_var args, :* } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { args, _, _, _, args2 = val result = block_var args, :*, args2 } | tSTAR f_norm_arg { _, splat = val result = block_var :"*#{splat}" } | tSTAR f_norm_arg tCOMMA f_marg_list { _, splat, _, args = val result = block_var :"*#{splat}", args } | tSTAR { result = block_var :* } | tSTAR tCOMMA f_marg_list { _, _, args = val result = block_var :*, args } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = call_args val } | f_block_kwarg opt_f_block_arg { result = call_args val } | f_kwrest opt_f_block_arg { result = call_args val } | f_block_arg { result = call_args val } opt_block_args_tail: tCOMMA block_args_tail { result = args val } | none block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_block_optarg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_rest_arg opt_block_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | block_args_tail { result = args val } opt_block_param: none { result = 0 } | block_param_def block_param_def: tPIPE opt_bv_decl tPIPE { result = args val } | tOROP { self.lexer.command_start = true result = s(:args) } | tPIPE block_param opt_bv_decl tPIPE { result = args val } opt_bv_decl: opt_nl | opt_nl tSEMI bv_decls opt_nl { result = args val } bv_decls: bvar { result = args val } | bv_decls tCOMMA bvar { result = args val } bvar: tIDENTIFIER { result = s(:shadow, val[0].to_sym) } | f_bad_arg lambda: { self.env.extend :dynamic result = self.lexer.lineno result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } f_larglist lambda_body { lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body self.env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl rparen { result = args val } | f_args { result = val[0] result = 0 if result == s(:args) } lambda_body: tLAMBEG compstmt tRCURLY { result = val[1] } | kDO_LAMBDA compstmt kEND { result = val[1] } do_block: kDO_BLOCK { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend } block_call: command do_block { # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] } | block_call dot_or_colon operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } | block_call dot_or_colon operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } | block_call dot_or_colon operation2 command_args do_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } method_call: fcall { result = self.lexer.lineno } paren_args { args = self.call_args val[2..-1] result = val[0].concat args.sexp_body } | primary_value call_op operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value tCOLON2 operation2 paren_args { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation3 { result = new_call val[0], val[2].to_sym } | primary_value call_op paren_args { result = new_call val[0], :call, val[2], val[1] } | primary_value tCOLON2 paren_args { result = new_call val[0], :call, val[2] } | kSUPER paren_args { result = new_super val[1] } | kSUPER { result = s(:zsuper) } | primary_value tLBRACK2 opt_call_args rbracket { result = new_aref val } brace_block: tLCURLY { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } | kDO { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } case_body: kWHEN { result = self.lexer.lineno } args then compstmt cases { result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] } cases: opt_else | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above } | { result = nil } exc_list: arg_value { result = s(:array, val[0]) } | mrhs | none exc_var: tASSOC lhs { result = val[1] } | none opt_ensure: kENSURE compstmt { _, body = val result = body || s(:nil) } | none literal: numeric { result = s(:lit, val[0]) } | symbol { result = s(:lit, val[0]) } | dsym strings: string { val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] } string: tCHAR { debug20 23, val, result } | string1 | string string1 { result = self.literal_concat val[0], val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = val[1] } | tSTRING { result = new_string val } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = new_xstring val[1] } regexp: tREGEXP_BEG regexp_contents tREGEXP_END { result = new_regexp val } words: tWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tWORDS_BEG word_list tSTRING_END { result = val[1] } word_list: none { result = new_word_list } | word_list word tSPACE { result = val[0].dup << new_word_list_entry(val) } word: string_content | word string_content { result = self.literal_concat val[0], val[1] } symbols: tSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tSYMBOLS_BEG symbol_list tSTRING_END { result = val[1] } symbol_list: none { result = new_symbol_list } | symbol_list word tSPACE { result = val[0].dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tQWORDS_BEG qword_list tSTRING_END { result = val[1] } qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tQSYMBOLS_BEG qsym_list tSTRING_END { result = val[1] } qword_list: none { result = new_qword_list } | qword_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qword_list_entry(val) } qsym_list: none { result = new_qsym_list } | qsym_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qsym_list_entry(val) } string_contents: none { result = s(:str, "") } | string_contents string_content { result = literal_concat(val[0], val[1]) } xstring_contents: none { result = nil } | xstring_contents string_content { result = literal_concat(val[0], val[1]) } regexp_contents: none { result = nil } | regexp_contents string_content { result = literal_concat(val[0], val[1]) } string_content: tSTRING_CONTENT { result = new_string val } | tSTRING_DVAR { result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg # TODO: expr_value ? } string_dvar { lexer.lex_strterm = val[1] result = s(:evstr, val[2]) } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store, lexer.lex_state, ] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_value } compstmt tRCURLY { # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg lexer.lex_state = oldlex_state case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else debug20 25 raise "unknown string body: #{stmt.inspect}" end } string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } | tIVAR { result = s(:ivar, val[0].to_sym) } | tCVAR { result = s(:cvar, val[0].to_sym) } | backref symbol: tSYMBEG sym { lexer.lex_state = :expr_end result = val[1].to_sym } | tSYMBOL { result = val[0].to_sym } sym: fname | tIVAR | tGVAR | tCVAR dsym: tSYMBEG xstring_contents tSTRING_END { lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) when :evstr then result = s(:dsym, "", result) else debug20 26, val, result end } numeric: simple_numeric | tUMINUS_NUM simple_numeric { result = -val[1] # TODO: pt_testcase } simple_numeric: tINTEGER | tFLOAT | tRATIONAL | tIMAGINARY user_variable: tIDENTIFIER | tIVAR | tGVAR | tCONSTANT | tCVAR keyword_variable: kNIL { result = s(:nil) } | kSELF { result = s(:self) } | kTRUE { result = s(:true) } | kFALSE { result = s(:false) } | k__FILE__ { result = s(:str, self.file) } | k__LINE__ { result = s(:lit, lexer.lineno) } | k__ENCODING__ { result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end } var_ref: user_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } | keyword_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } var_lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 29, val, result } backref: tNTH_REF { result = s(:nth_ref, val[0]) } | tBACK_REF { result = s(:back_ref, val[0]) } superclass: term { result = nil } | tLT { lexer.lex_state = :expr_beg } expr_value term { result = val[2] } | error term { yyerrok result = nil debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] self.lexer.lex_state = :expr_beg self.lexer.command_start = true # TODO: # $$ = parser->parser_in_kwarg; # parser->parser_in_kwarg = 1; } | f_args term { # TODO: parser->parser_in_kwarg = $1; result = val[0] self.lexer.lex_state = :expr_beg self.lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = args val } | f_kwarg opt_f_block_arg { result = args val } | f_kwrest opt_f_block_arg { result = args val } | f_block_arg opt_args_tail: tCOMMA args_tail { result = val[1] } | { result = nil } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_optarg opt_args_tail { result = args val } | f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_rest_arg opt_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | args_tail { result = args val } | { result = args val } f_bad_arg: tCONSTANT { yyerror "formal argument cannot be a constant" } | tIVAR { yyerror "formal argument cannot be an instance variable" } | tGVAR { yyerror "formal argument cannot be a global variable" } | tCVAR { yyerror "formal argument cannot be a class variable" } f_norm_arg: f_bad_arg | tIDENTIFIER { identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier } f_arg_asgn: f_norm_arg f_arg_item: f_arg_asgn | tLPAREN f_margs rparen { result = val[1] } f_arg: f_arg_item { case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end } | f_arg tCOMMA f_arg_item { list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item } f_label: tLABEL f_kw: f_label arg_value { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } | f_label { label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) } f_block_kw: f_label primary_value { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } | f_label { label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) } f_block_kwarg: f_block_kw | f_block_kwarg tCOMMA f_block_kw { list, _, item = val result = list << item.last } f_kwarg: f_kw | f_kwarg tCOMMA f_kw { result = args val } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { result = :"**#{val[1]}" } | kwrest_mark { result = :"**" } f_opt: f_arg_asgn tEQL arg_value { result = self.assignable val[0], val[2] # TODO: detect duplicate names } f_block_opt: f_arg_asgn tEQL primary_value { result = self.assignable val[0], val[2] } f_block_optarg: f_block_opt { result = s(:block, val[0]) } | f_block_optarg tCOMMA f_block_opt { result = val[0] result << val[2] } f_optarg: f_opt { result = s(:block, val[0]) } | f_optarg tCOMMA f_opt { result = self.block_append val[0], val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" } | restarg_mark { name = :"*" self.env[name] = :lvar result = name } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym } opt_f_block_arg: tCOMMA f_block_arg { result = val[1] } | { result = nil } singleton: var_ref | tLPAREN2 { lexer.lex_state = :expr_beg } expr rparen { result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit } assoc_list: none # [!nil] { result = s(:array) } | assocs trailer # [!nil] { result = val[0] } assocs: assoc | assocs tCOMMA assoc { list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash } assoc: arg_value tASSOC arg_value { result = s(:array, val[0], val[2]) } | tLABEL opt_nl arg_value { result = s(:array, s(:lit, val[0][0].to_sym), val.last) } | tSTRING_BEG string_contents tLABEL_END arg_value { _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value) } | tSYMBOL arg_value { raise "not yet: #{val.inspect}" # result = s(:array, s(:lit, val[1].to_sym), val[1]) } | tDSTAR arg_value { result = s(:array, s(:kwsplat, val[1])) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 call_op: tDOT | tLONELY opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN rbracket: opt_nl tRBRACK trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI { yyerrok } none: { result = nil; } end ---- inner require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ruby_parser-3.11.0/lib/ruby20_parser.y0000644000004100000410000023165413277753330017645 0ustar www-datawww-data# -*- racc -*- class Ruby20Parser token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__ k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG prechigh right tBANG tTILDE tUPLUS right tPOW right tUMINUS_NUM tUMINUS left tSTAR2 tDIVIDE tPERCENT left tPLUS tMINUS left tLSHFT tRSHFT left tAMPER2 left tPIPE tCARET left tGT tGEQ tLT tLEQ nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH left tANDOP left tOROP nonassoc tDOT2 tDOT3 right tEH tCOLON left kRESCUE_MOD right tEQL tOP_ASGN nonassoc kDEFINED right kNOT left kOR kAND nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD nonassoc tLBRACE_ARG nonassoc tLOWEST preclow rule program: { self.lexer.lex_state = :expr_beg } top_compstmt { result = new_compstmt val } top_compstmt: top_stmts opt_terms { result = val[0] } top_stmts: none | top_stmt | top_stmts terms top_stmt { result = self.block_append val[0], val[2] } | error top_stmt top_stmt: stmt { result = val[0] # TODO: remove once I have more confidence this is fixed # result.each_of_type :call_args do |s| # debug20 666, s, result # end } | klBEGIN { if (self.in_def || self.in_single > 0) then debug20 1 yyerror "BEGIN in method" end self.env.extend } tLCURLY top_compstmt tRCURLY { result = new_iter s(:preexe), nil, val[3] } bodystmt: compstmt opt_rescue opt_else opt_ensure { result = new_body val } compstmt: stmts opt_terms { result = new_compstmt val } stmts: none | stmt | stmts terms stmt { result = self.block_append val[0], val[2] } | error stmt { result = val[1] debug20 2, val, result } stmt: kALIAS fitem { lexer.lex_state = :expr_fname result = self.lexer.lineno } fitem { result = s(:alias, val[1], val[3]).line(val[2]) } | kALIAS tGVAR tGVAR { result = s(:valias, val[1].to_sym, val[2].to_sym) } | kALIAS tGVAR tBACK_REF { result = s(:valias, val[1].to_sym, :"$#{val[2]}") } | kALIAS tGVAR tNTH_REF { yyerror "can't make alias for the number variables" } | kUNDEF undef_list { result = val[1] } | stmt kIF_MOD expr_value { result = new_if val[2], val[0], nil } | stmt kUNLESS_MOD expr_value { result = new_if val[2], nil, val[0] } | stmt kWHILE_MOD expr_value { result = new_while val[0], val[2], true } | stmt kUNTIL_MOD expr_value { result = new_until val[0], val[2], true } | stmt kRESCUE_MOD stmt { result = s(:rescue, val[0], new_resbody(s(:array), val[2])) } | klEND tLCURLY compstmt tRCURLY { if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } | var_lhs tOP_ASGN command_call { result = new_op_asgn val } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value call_op tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 4, val, result } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 5, val, result } | backref tOP_ASGN command_call { self.backref_assign_error val[0] } | lhs tEQL mrhs { result = new_assign val[0], s(:svalue, val[2]) } | mlhs tEQL arg_value { result = new_masgn val[0], val[2], :wrap } | mlhs tEQL mrhs { result = new_masgn val[0], val[2] } | expr command_asgn: lhs tEQL command_call { result = new_assign val[0], val[2] } | lhs tEQL command_asgn { result = new_assign val[0], val[2] } expr: command_call | expr kAND expr { result = logical_op :and, val[0], val[2] } | expr kOR expr { result = logical_op :or, val[0], val[2] } | kNOT opt_nl expr { result = s(:call, val[2], :"!") } | tBANG command_call { result = s(:call, val[1], :"!") } | arg expr_value: expr { result = value_expr(val[0]) } command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = new_call val[0], val[2].to_sym, val[3] } cmd_brace_block: tLBRACE_ARG { self.env.extend(:dynamic) result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend } fcall: operation { result = new_call nil, val[0].to_sym } command: fcall command_args =tLOWEST { result = val[0].concat val[1].sexp_body # REFACTOR pattern } | fcall command_args cmd_brace_block { result = val[0].concat val[1].sexp_body if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value call_op operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] block_dup_check call, block block.insert 1, call result = block } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block } | kSUPER command_args { result = new_super val[1] } | kYIELD command_args { result = new_yield val[1] } | kRETURN call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { line = val[0].last result = s(:break, ret_args(val[1])).line(line) } | kNEXT call_args { line = val[0].last result = s(:next, ret_args(val[1])).line(line) } mlhs: mlhs_basic | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { result = s(:masgn, s(:array, val[1])) } mlhs_basic: mlhs_head { result = s(:masgn, val[0]) } | mlhs_head mlhs_item { result = s(:masgn, val[0] << val[1].compact) } | mlhs_head tSTAR mlhs_node { result = s(:masgn, val[0] << s(:splat, val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val result = list_append ary1, s(:splat, splat) result.concat ary2.sexp_body result = s(:masgn, result) } | mlhs_head tSTAR { result = s(:masgn, val[0] << s(:splat)) } | mlhs_head tSTAR tCOMMA mlhs_post { ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR mlhs_node { result = s(:masgn, s(:array, s(:splat, val[1]))) } | tSTAR mlhs_node tCOMMA mlhs_post { ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR { result = s(:masgn, s(:array, s(:splat))) } | tSTAR tCOMMA mlhs_post { result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_head: mlhs_item tCOMMA { result = s(:array, val[0]) } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1].compact } mlhs_post: mlhs_item { result = s(:array, val[0]) } | mlhs_post tCOMMA mlhs_item { result = list_append val[0], val[2] } mlhs_node: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER # REFACTOR { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT # REFACTOR? { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } cname: tIDENTIFIER { yyerror "class/module name must be CONSTANT" } | tCONSTANT cpath: tCOLON3 cname { result = s(:colon3, val[1].to_sym) } | cname { result = val[0].to_sym } | primary_value tCOLON2 cname { result = s(:colon2, val[0], val[2].to_sym) } fname: tIDENTIFIER | tCONSTANT | tFID | op { lexer.lex_state = :expr_end result = val[0] } | reswords { lexer.lex_state = :expr_end result = val[0] } fsym: fname | symbol fitem: fsym { result = s(:lit, val[0].to_sym) } | dsym undef_list: fitem { result = new_undef val[0] } | undef_list tCOMMA { lexer.lex_state = :expr_fname } fitem { result = new_undef val[0], val[3] } op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 | tUBANG reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE | kCLASS | kDEF | kDEFINED | kDO | kELSE | kELSIF | kEND | kENSURE | kFALSE | kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT | kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL arg: lhs tEQL arg { result = new_assign val[0], val[2] } | lhs tEQL arg kRESCUE_MOD arg { result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) } | var_lhs tOP_ASGN arg { result = new_op_asgn val } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN arg { result = new_op_asgn2 val } | primary_value call_op tCONSTANT tOP_ASGN arg { result = new_op_asgn2 val } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | tCOLON3 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | backref tOP_ASGN arg { self.backref_assign_error val[0] } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end } | arg tPLUS arg { result = new_call val[0], :+, argl(val[2]) } | arg tMINUS arg { result = new_call val[0], :-, argl(val[2]) } | arg tSTAR2 arg # TODO: rename { result = new_call val[0], :*, argl(val[2]) } | arg tDIVIDE arg { result = new_call val[0], :"/", argl(val[2]) } | arg tPERCENT arg { result = new_call val[0], :"%", argl(val[2]) } | arg tPOW arg { result = new_call val[0], :**, argl(val[2]) } | tUMINUS_NUM tINTEGER tPOW arg { result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") } | tUMINUS_NUM tFLOAT tPOW arg { result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") ## TODO: why is this 2.0 only? debug20 12, val, result } | tUPLUS arg { result = new_call val[1], :"+@" } | tUMINUS arg { result = new_call val[1], :"-@" } | arg tPIPE arg { result = new_call val[0], :"|", argl(val[2]) } | arg tCARET arg { result = new_call val[0], :"^", argl(val[2]) } | arg tAMPER2 arg { result = new_call val[0], :"&", argl(val[2]) } | arg tCMP arg { result = new_call val[0], :"<=>", argl(val[2]) } | arg tGT arg { result = new_call val[0], :">", argl(val[2]) } | arg tGEQ arg { result = new_call val[0], :">=", argl(val[2]) } | arg tLT arg { result = new_call val[0], :"<", argl(val[2]) } | arg tLEQ arg { result = new_call val[0], :"<=", argl(val[2]) } | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) } | arg tEQQ arg { result = new_call val[0], :"===", argl(val[2]) } | arg tNEQ arg { result = new_call val[0], :"!=", argl(val[2]) } | arg tMATCH arg { result = new_match val[0], val[2] } | arg tNMATCH arg { result = s(:not, new_match(val[0], val[2])) } | tBANG arg { result = new_call val[1], :"!" } | tTILDE arg { result = new_call value_expr(val[1]), :"~" } | arg tLSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) } | arg tRSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) } | arg tANDOP arg { result = logical_op :and, val[0], val[2] } | arg tOROP arg { result = logical_op :or, val[0], val[2] } | kDEFINED opt_nl arg { result = s(:defined, val[2]) } | arg tEH arg opt_nl tCOLON arg { result = s(:if, val[0], val[2], val[5]) } | primary arg_value: arg { result = value_expr(val[0]) } aref_args: none | args trailer { result = args [val[0]] } | args tCOMMA assocs trailer { result = args [val[0], array_to_hash(val[2])] } | assocs trailer { result = args [array_to_hash(val[0])] } paren_args: tLPAREN2 opt_call_args rparen { result = val[1] } opt_paren_args: none | paren_args opt_call_args: none { result = val[0] } | call_args { result = val[0] } | args tCOMMA { result = args val } | args tCOMMA assocs tCOMMA { result = args [val[0], array_to_hash(val[2])] } | assocs tCOMMA { result = args [array_to_hash(val[0])] } call_args: command { warning "parenthesize argument(s) for future version" result = call_args val } | args opt_block_arg { result = call_args val result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { result = call_args [array_to_hash(val[0])] result = self.arg_blk_pass result, val[1] } | args tCOMMA assocs opt_block_arg { result = call_args [val[0], array_to_hash(val[2])] result = self.arg_blk_pass result, val[3] } | block_arg { result = call_args val } command_args: { result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true } call_args { lexer.cmdarg.stack.replace val[0] result = val[1] } block_arg: tAMPER arg_value { result = s(:block_pass, val[1]) } opt_block_arg: tCOMMA block_arg { result = val[1] } | none args: arg_value { result = s(:array, val[0]) } | tSTAR arg_value { result = s(:array, s(:splat, val[1])) } | args tCOMMA arg_value { result = self.list_append val[0], val[2] } | args tCOMMA tSTAR arg_value { result = self.list_append val[0], s(:splat, val[3]) } mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = self.arg_concat val[0], val[3] } | tSTAR arg_value { result = s(:splat, val[1]) } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = new_call nil, val[0].to_sym } | kBEGIN { result = self.lexer.lineno } bodystmt kEND { unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] } | tLPAREN_ARG rparen { debug20 13, val, result } | tLPAREN_ARG { result = self.lexer.cmdarg.stack.dup lexer.cmdarg.stack.replace [false] # TODO add api for these } expr { lexer.lex_state = :expr_endarg } rparen { warning "(...) interpreted as grouped expression" lexer.cmdarg.stack.replace val[1] result = val[2] } | tLPAREN compstmt tRPAREN { result = val[1] || s(:nil) result.paren = true } | primary_value tCOLON2 tCONSTANT { result = s(:colon2, val[0], val[2].to_sym) } | tCOLON3 tCONSTANT { result = s(:colon3, val[1].to_sym) } | tLBRACK aref_args tRBRACK { result = val[1] || s(:array) result.sexp_type = :array # aref_args is :args } | tLBRACE { result = self.lexer.lineno } assoc_list tRCURLY { result = new_hash val } | kRETURN { result = s(:return) } | kYIELD tLPAREN2 call_args rparen { result = new_yield val[2] } | kYIELD tLPAREN2 rparen { result = new_yield } | kYIELD { result = new_yield } | kDEFINED opt_nl tLPAREN2 expr rparen { result = s(:defined, val[3]) } | kNOT tLPAREN2 expr rparen { result = s(:call, val[2], :"!") } | kNOT tLPAREN2 rparen { debug20 14, val, result } | fcall brace_block { oper, iter = val[0], val[1] call = oper # FIX iter.insert 1, call result = iter call.line = iter.line } | method_call | method_call brace_block { call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter } | tLAMBDA lambda { result = val[1] # TODO: fix lineno } | kIF expr_value then compstmt if_tail kEND { result = new_if val[1], val[3], val[4] } | kUNLESS expr_value then compstmt opt_else kEND { result = new_if val[1], val[4], val[3] } | kWHILE { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_while val[5], val[2], true } | kUNTIL { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_until val[5], val[2], true } | kCASE expr_value opt_terms case_body kEND { (_, line), expr, _, body, _ = val result = new_case expr, body, line } | kCASE opt_terms case_body kEND { (_, line), _, body, _ = val result = new_case nil, body, line } | kFOR for_var kIN { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_for val[4], val[1], val[7] } | kCLASS { result = self.lexer.lineno } cpath superclass { self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend } bodystmt kEND { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kCLASS tLSHFT { result = self.lexer.lineno } expr { result = self.in_def self.in_def = false } term { result = self.in_single self.in_single = 0 self.env.extend } bodystmt kEND { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kMODULE { result = self.lexer.lineno } cpath { self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend } bodystmt kEND { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kDEF fname { result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend # TODO: local->cmdargs = cmdarg_stack; # TODO: port local_push_gen and local_pop_gen lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body } | kDEF singleton dot_or_colon { self.comments.push self.lexer.comments lexer.lex_state = :expr_fname } fname { self.in_single += 1 self.env.extend lexer.lex_state = :expr_endfn # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body } | kBREAK { result = s(:break) } | kNEXT { result = s(:next) } | kREDO { result = s(:redo) } | kRETRY { result = s(:retry) } primary_value: primary { result = value_expr(val[0]) } # These are really stupid k_begin: kBEGIN k_if: kIF k_unless: kUNLESS k_while: kWHILE k_until: kUNTIL k_case: kCASE k_for: kFOR k_class: kCLASS k_module: kMODULE k_def: kDEF k_end: kEND then: term | kTHEN | term kTHEN do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { result = s(:if, val[1], val[3], val[4]) } opt_else: none | kELSE compstmt { result = val[1] } for_var: lhs | mlhs { val[0].delete_at 1 if val[0][1].nil? # HACK } f_marg: f_norm_arg | tLPAREN f_margs rparen { result = val[1] } f_marg_list: f_marg { result = s(:array, val[0]) } | f_marg_list tCOMMA f_marg { result = list_append val[0], val[2] } f_margs: f_marg_list { args, = val result = block_var args } | f_marg_list tCOMMA tSTAR f_norm_arg { args, _, _, splat = val result = block_var args, "*#{splat}".to_sym } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 } | f_marg_list tCOMMA tSTAR { args, _, _ = val result = block_var args, :* } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { args, _, _, _, args2 = val result = block_var args, :*, args2 } | tSTAR f_norm_arg { _, splat = val result = block_var :"*#{splat}" } | tSTAR f_norm_arg tCOMMA f_marg_list { _, splat, _, args = val result = block_var :"*#{splat}", args } | tSTAR { result = block_var :* } | tSTAR tCOMMA f_marg_list { _, _, args = val result = block_var :*, args } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = call_args val } | f_block_kwarg opt_f_block_arg { result = call_args val } | f_kwrest opt_f_block_arg { result = call_args val } | f_block_arg { result = call_args val } opt_block_args_tail: tCOMMA block_args_tail { result = args val } | none block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_block_optarg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_rest_arg opt_block_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | block_args_tail { result = args val } opt_block_param: none { result = 0 } | block_param_def block_param_def: tPIPE opt_bv_decl tPIPE { result = args val } | tOROP { self.lexer.command_start = true result = s(:args) } | tPIPE block_param opt_bv_decl tPIPE { result = args val } opt_bv_decl: opt_nl | opt_nl tSEMI bv_decls opt_nl { result = args val } bv_decls: bvar { result = args val } | bv_decls tCOMMA bvar { result = args val } bvar: tIDENTIFIER { result = s(:shadow, val[0].to_sym) } | f_bad_arg lambda: { self.env.extend :dynamic result = self.lexer.lineno result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } f_larglist lambda_body { lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body self.env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl rparen { result = args val } | f_args { result = val[0] result = 0 if result == s(:args) } lambda_body: tLAMBEG compstmt tRCURLY { result = val[1] } | kDO_LAMBDA compstmt kEND { result = val[1] } do_block: kDO_BLOCK { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend } block_call: command do_block { # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] } | block_call dot_or_colon operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } | block_call dot_or_colon operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } | block_call dot_or_colon operation2 command_args do_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } method_call: fcall { result = self.lexer.lineno } paren_args { args = self.call_args val[2..-1] result = val[0].concat args.sexp_body } | primary_value call_op operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value tCOLON2 operation2 paren_args { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation3 { result = new_call val[0], val[2].to_sym } | primary_value call_op paren_args { result = new_call val[0], :call, val[2], val[1] } | primary_value tCOLON2 paren_args { result = new_call val[0], :call, val[2] } | kSUPER paren_args { result = new_super val[1] } | kSUPER { result = s(:zsuper) } | primary_value tLBRACK2 opt_call_args rbracket { result = new_aref val } brace_block: tLCURLY { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } | kDO { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } case_body: kWHEN { result = self.lexer.lineno } args then compstmt cases { result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] } cases: opt_else | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above } | { result = nil } exc_list: arg_value { result = s(:array, val[0]) } | mrhs | none exc_var: tASSOC lhs { result = val[1] } | none opt_ensure: kENSURE compstmt { _, body = val result = body || s(:nil) } | none literal: numeric { result = s(:lit, val[0]) } | symbol { result = s(:lit, val[0]) } | dsym strings: string { val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] } string: tCHAR { debug20 23, val, result } | string1 | string string1 { result = self.literal_concat val[0], val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = val[1] } | tSTRING { result = new_string val } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = new_xstring val[1] } regexp: tREGEXP_BEG regexp_contents tREGEXP_END { result = new_regexp val } words: tWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tWORDS_BEG word_list tSTRING_END { result = val[1] } word_list: none { result = new_word_list } | word_list word tSPACE { result = val[0].dup << new_word_list_entry(val) } word: string_content | word string_content { result = self.literal_concat val[0], val[1] } symbols: tSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tSYMBOLS_BEG symbol_list tSTRING_END { result = val[1] } symbol_list: none { result = new_symbol_list } | symbol_list word tSPACE { result = val[0].dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tQWORDS_BEG qword_list tSTRING_END { result = val[1] } qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tQSYMBOLS_BEG qsym_list tSTRING_END { result = val[1] } qword_list: none { result = new_qword_list } | qword_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qword_list_entry(val) } qsym_list: none { result = new_qsym_list } | qsym_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qsym_list_entry(val) } string_contents: none { result = s(:str, "") } | string_contents string_content { result = literal_concat(val[0], val[1]) } xstring_contents: none { result = nil } | xstring_contents string_content { result = literal_concat(val[0], val[1]) } regexp_contents: none { result = nil } | regexp_contents string_content { result = literal_concat(val[0], val[1]) } string_content: tSTRING_CONTENT { result = new_string val } | tSTRING_DVAR { result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg # TODO: expr_value ? } string_dvar { lexer.lex_strterm = val[1] result = s(:evstr, val[2]) } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store, lexer.lex_state, ] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_value } compstmt tRCURLY { # TODO: tRCURLY -> tSTRING_DEND _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg lexer.lex_state = oldlex_state case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else debug20 25 raise "unknown string body: #{stmt.inspect}" end } string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } | tIVAR { result = s(:ivar, val[0].to_sym) } | tCVAR { result = s(:cvar, val[0].to_sym) } | backref symbol: tSYMBEG sym { lexer.lex_state = :expr_end result = val[1].to_sym } | tSYMBOL { result = val[0].to_sym } sym: fname | tIVAR | tGVAR | tCVAR dsym: tSYMBEG xstring_contents tSTRING_END { lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) when :evstr then result = s(:dsym, "", result) else debug20 26, val, result end } numeric: tINTEGER | tFLOAT | tUMINUS_NUM tINTEGER =tLOWEST { result = -val[1] # TODO: pt_testcase } | tUMINUS_NUM tFLOAT =tLOWEST { result = -val[1] # TODO: pt_testcase } user_variable: tIDENTIFIER | tIVAR | tGVAR | tCONSTANT | tCVAR keyword_variable: kNIL { result = s(:nil) } | kSELF { result = s(:self) } | kTRUE { result = s(:true) } | kFALSE { result = s(:false) } | k__FILE__ { result = s(:str, self.file) } | k__LINE__ { result = s(:lit, lexer.lineno) } | k__ENCODING__ { result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end } var_ref: user_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } | keyword_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } var_lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 29, val, result } backref: tNTH_REF { result = s(:nth_ref, val[0]) } | tBACK_REF { result = s(:back_ref, val[0]) } superclass: term { result = nil } | tLT { lexer.lex_state = :expr_beg } expr_value term { result = val[2] } | error term { yyerrok result = nil debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] self.lexer.lex_state = :expr_beg self.lexer.command_start = true # TODO: # $$ = parser->parser_in_kwarg; # parser->parser_in_kwarg = 1; } | f_args term { # TODO: parser->parser_in_kwarg = $1; result = val[0] self.lexer.lex_state = :expr_beg self.lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = args val } | f_kwarg opt_f_block_arg { result = args val } | f_kwrest opt_f_block_arg { result = args val } | f_block_arg opt_args_tail: tCOMMA args_tail { result = val[1] } | { result = nil } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_optarg opt_args_tail { result = args val } | f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_rest_arg opt_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | args_tail { result = args val } | { result = args val } f_bad_arg: tCONSTANT { yyerror "formal argument cannot be a constant" } | tIVAR { yyerror "formal argument cannot be an instance variable" } | tGVAR { yyerror "formal argument cannot be a global variable" } | tCVAR { yyerror "formal argument cannot be a class variable" } f_norm_arg: f_bad_arg | tIDENTIFIER { identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier } f_arg_item: f_norm_arg | tLPAREN f_margs rparen { result = val[1] } f_arg: f_arg_item { case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end } | f_arg tCOMMA f_arg_item { list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item } f_kw: tLABEL arg_value { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } f_block_kw: tLABEL primary_value { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } f_block_kwarg: f_block_kw | f_block_kwarg tCOMMA f_block_kw { list, _, item = val result = list << item.last } f_kwarg: f_kw | f_kwarg tCOMMA f_kw { result = args val } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { result = :"**#{val[1]}" } | kwrest_mark { result = :"**" } f_opt: tIDENTIFIER tEQL arg_value { result = self.assignable val[0], val[2] # TODO: detect duplicate names } f_block_opt: tIDENTIFIER tEQL primary_value { result = self.assignable val[0], val[2] } f_block_optarg: f_block_opt { result = s(:block, val[0]) } | f_block_optarg tCOMMA f_block_opt { result = val[0] result << val[2] } f_optarg: f_opt { result = s(:block, val[0]) } | f_optarg tCOMMA f_opt { result = self.block_append val[0], val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" } | restarg_mark { name = :"*" self.env[name] = :lvar result = name } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym } opt_f_block_arg: tCOMMA f_block_arg { result = val[1] } | { result = nil } singleton: var_ref | tLPAREN2 { lexer.lex_state = :expr_beg } expr rparen { result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit } assoc_list: none # [!nil] { result = s(:array) } | assocs trailer # [!nil] { result = val[0] } assocs: assoc | assocs tCOMMA assoc { list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash } assoc: arg_value tASSOC arg_value { result = s(:array, val[0], val[2]) } | tLABEL opt_nl arg_value { result = s(:array, s(:lit, val[0][0].to_sym), val.last) } | tDSTAR arg_value { result = s(:array, s(:kwsplat, val[1])) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 call_op: tDOT opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN rbracket: opt_nl tRBRACK trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI { yyerrok } none: { result = nil; } end ---- inner require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ruby_parser-3.11.0/lib/ruby19_parser.rb0000644000004100000410000071105313277753330020004 0ustar www-datawww-data# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.14 # from Racc grammer file "". # require 'racc/parser.rb' class Ruby19Parser < RubyParser::Parser require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ##### State transition tables begin ### clist = [ '-561,281,69,70,71,12,57,-561,-561,-561,63,64,-561,-561,-561,67,-561', '65,66,68,32,33,72,73,231,-561,-561,-561,-561,31,30,29,95,94,96,97,-561', '-561,22,-561,-561,-561,-561,-561,11,47,551,13,99,98,100,89,56,91,90', '92,717,93,101,102,-101,87,88,551,44,45,43,-561,-561,-561,-561,-561,-561', '-561,-561,-561,-561,-561,-561,-561,-561,259,618,-561,-561,-561,42,751', '-561,35,674,-561,58,59,-561,-561,60,-561,37,-561,592,-561,46,-561,-561', '-561,-561,-561,-561,-561,23,-561,-561,-561,-100,85,79,81,82,83,84,-101', '697,-106,80,86,-561,-561,-561,-561,-561,-561,551,62,-561,-103,259,-561', '-561,-561,697,750,-104,-561,-561,-105,-561,-107,697,-102,777,79,557', '-99,-492,-561,551,210,-104,80,107,-492,716,591,834,106,-561,-561,258', '-561,-561,-561,-561,-561,-101,107,615,107,261,-101,106,107,106,-103', '749,551,106,-102,-103,-104,207,208,604,211,207,208,673,-561,-561,-561', '-561,-561,-561,-561,-561,-561,-561,-561,-561,-561,-561,-558,-101,-561', '-561,-561,708,612,-490,-91,709,-561,107,258,-561,-490,-92,106,-97,-561', '-495,-561,-102,-561,-561,-561,-561,-561,-561,-561,107,-561,-561,-561', '603,106,107,-95,107,-557,-96,106,-98,106,-93,-484,-561,-561,-90,-94', '-265,-561,-484,-484,-484,-103,-557,-484,-484,-484,107,-484,-104,882', '211,106,629,-104,-99,-484,211,-484,-484,-484,211,629,-93,629,-94,207', '208,-484,-484,-496,-484,-484,-484,-484,-484,107,-95,-102,-103,-496,106', '599,-102,-103,259,688,628,535,534,533,-85,536,-263,434,833,628,-71,628', '-484,-484,-484,-484,-484,-484,-484,-484,-484,-484,-484,-484,-484,-484', '629,-484,-484,-484,-484,-100,-484,-484,-484,-91,-484,-561,579,-484,-484', '-100,-484,-93,-484,506,-484,597,-484,-484,-484,-484,-484,-484,-484,-107', '-484,-95,-484,579,628,590,688,-406,535,534,533,586,536,211,-415,-484', '-484,-484,-484,-284,-484,921,-93,-484,-484,-93,-284,-284,-284,258,836', '-93,-284,-284,-561,-284,-95,-106,838,-95,231,-561,-481,581,580,-95,-557', '-561,386,-481,-561,841,727,388,387,-284,-284,842,-284,-284,-284,-284', '-284,205,581,580,593,-415,-561,207,208,762,228,506,-415,-489,230,229', '-555,579,107,848,-489,-415,798,106,-284,-284,-284,-284,-284,-284,-284', '-284,-284,-284,-284,-284,-284,-284,-561,-415,-284,-284,-284,-98,611', '-561,-554,562,-284,-107,-557,-284,579,-97,-561,584,-284,660,-284,-106', '-284,-284,-284,-284,-284,-284,-284,579,-284,-484,-284,518,-561,579,517', '561,-484,854,581,580,587,-555,-284,-284,-284,-484,-96,378,-284,-284', '-284,-284,-105,-263,-284,-284,-284,735,-284,-481,-495,518,107,-555,520', '-488,-481,106,-284,-284,-284,-554,-488,581,580,-481,207,208,-284,-284', '-487,-284,-284,-284,-284,-284,606,-487,581,580,582,-277,858,-554,581', '580,577,-486,-277,-92,518,107,-90,520,-486,-101,106,-277,-99,-284,-284', '-284,-284,-284,-284,-284,-284,-284,-284,-284,-284,-284,-284,860,203', '-284,-284,-284,-95,752,-284,204,861,-284,-104,252,-284,-284,211,-284', '202,-284,253,-284,863,-284,-284,-284,-284,-284,-284,-284,866,-284,763', '-284,535,534,533,688,536,535,534,533,518,536,868,520,-284,-284,-284', '-284,-481,-284,605,-491,-284,-105,107,-481,-481,-481,-491,106,-481,-481', '-481,688,-481,535,534,533,540,536,802,777,-481,684,-481,-481,-481,544', '543,547,546,870,687,870,-481,-481,-332,-481,-481,-481,-481,-481,-93', '-332,107,107,211,574,-102,106,106,540,-332,688,575,535,534,533,557,536', '762,875,547,546,877,-481,-481,-481,-481,-481,-481,-481,-481,-481,-481', '-481,-481,-481,-481,879,430,-481,-481,-481,521,-481,-481,431,231,-481', '508,684,-481,-481,199,-481,432,-481,211,-481,874,-481,-481,-481,-481', '-481,-481,-481,507,-481,538,-481,535,534,533,-493,536,110,111,112,113', '114,-493,-494,-481,-481,-481,-481,-563,-481,-494,-493,-481,-481,503', '-563,-563,-563,889,-494,-563,-563,-563,688,-563,535,534,533,540,536', '207,208,890,-563,-563,-563,-563,544,543,547,546,207,208,211,-563,-563', '497,-563,-563,-563,-563,-563,688,498,535,534,533,893,536,501,502,540', '496,688,-266,535,534,533,261,536,802,777,547,546,211,-563,-563,-563', '-563,-563,-563,-563,-563,-563,-563,-563,-563,-563,-563,264,684,-563', '-563,-563,3,231,-563,307,308,-563,499,684,-563,-563,492,-563,900,-563', '901,-563,687,-563,-563,-563,-563,-563,-563,-563,491,-563,-563,-563,688', '904,535,534,533,228,536,211,906,230,229,509,-563,-563,-563,-563,-562', '-563,510,907,-563,-70,211,-562,-562,-562,483,432,-562,-562,-562,763', '-562,535,534,533,231,536,540,481,478,-562,-562,-562,-562,261,468,923', '210,547,546,925,-562,-562,559,-562,-562,-562,-562,-562,688,560,535,534', '533,926,536,436,228,540,558,435,230,229,226,227,930,433,544,543,547', '546,934,-562,-562,-562,-562,-562,-562,-562,-562,-562,-562,-562,-562', '-562,-562,937,684,-562,-562,-562,-285,939,-562,870,870,-562,944,-285', '-562,-562,945,-562,389,-562,870,-562,-285,-562,-562,-562,-562,-562,-562', '-562,870,-562,-562,-562,688,923,535,534,533,950,536,952,870,231,870', '712,-562,-562,-562,-562,-278,-562,711,870,-562,956,923,-278,-278,-278', '384,713,-278,-278,-278,538,-278,535,534,533,368,536,540,365,341,228', '-278,-278,-278,230,229,226,227,547,546,211,-278,-278,306,-278,-278,-278', '-278,-278,688,305,535,534,533,666,536,250,103,540,721,688,206,535,534', '533,201,536,544,543,547,546,923,-278,-278,-278,-278,-278,-278,-278,-278', '-278,-278,-278,-278,-278,-278,980,684,-278,-278,-278,981,982,-278,984', '870,-278,870,684,-278,-278,870,-278,-558,-278,-557,-278,468,-278,-278', '-278,-278,-278,-278,-278,468,-278,688,-278,535,534,533,-285,536,110', '111,112,113,114,-285,712,-278,-278,-278,-278,736,-278,943,-285,-278', '281,69,70,71,12,57,713,825,826,63,64,827,101,102,67,540,65,66,68,32', '33,72,73,-264,730,211,547,546,31,30,29,95,94,96,97,729,846,22,535,534', '533,754,536,11,47,481,13,99,98,100,89,56,91,90,92,700,93,101,102,483', '87,88,557,44,45,43,693,688,660,535,534,533,688,536,535,534,533,-284', '536,211,-493,691,690,-494,-284,42,261,-493,35,-558,-494,58,59,-284,682', '60,-493,37,211,-494,688,46,535,534,533,684,536,261,660,23,540,681,678', '231,85,79,81,82,83,84,231,547,546,80,86,281,69,70,71,12,57,676,62,777', '63,64,483,670,540,67,762,65,66,68,32,33,72,73,211,547,546,667,666,31', '30,29,95,94,96,97,660,846,22,535,534,533,512,536,11,47,796,13,99,98', '100,89,56,91,90,92,-284,93,101,102,211,87,88,-284,44,45,43,948,-558', '211,777,-277,-284,688,949,535,534,533,-277,536,806,-285,649,947,211', '-85,42,-277,-285,35,211,211,58,59,211,200,60,-285,37,231,231,231,46', '538,,535,534,533,,536,23,540,,,,85,79,81,82,83,84,,547,546,80,86,281', '69,70,71,12,57,,62,,63,64,,,,67,540,65,66,68,32,33,72,73,,544,543,547', '546,31,30,29,95,94,96,97,,,22,110,111,112,113,114,11,47,,13,99,98,100', '89,56,91,90,92,-284,93,101,102,,87,88,-284,44,45,43,,-558,,,,-284,688', ',535,534,533,,536,110,111,112,113,114,,42,,,35,,,58,59,,,60,,37,,,,46', '763,,535,534,533,,536,23,540,,,,85,79,81,82,83,84,,547,546,80,86,281', '69,70,71,12,57,,62,,63,64,,,,67,540,65,66,68,32,33,72,73,,544,543,547', '546,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92', ',93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60', ',37,,,,46,763,,535,534,533,,536,23,,,,,85,79,81,82,83,84,,,,80,86,281', '69,70,71,12,57,,62,,63,64,,,,67,540,65,66,68,32,33,72,73,,544,543,547', '546,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92', ',93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60', ',37,,,,46,538,,535,534,533,,536,23,,,,,85,79,81,82,83,84,,,,80,86,281', '69,70,71,12,57,,62,,63,64,,,,67,540,65,66,68,32,33,72,73,,544,543,547', '546,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92', ',93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60', ',37,,,,46,538,,535,534,533,,536,23,,,,,85,79,81,82,83,84,,,,80,86,281', '69,70,71,12,57,,62,,63,64,,,,67,540,65,66,68,32,33,72,73,,544,543,547', '546,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92', ',93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60', ',37,,,,46,538,,535,534,533,,536,23,,,,,85,79,81,82,83,84,,,,80,86,281', '69,70,71,12,57,,62,,63,64,,,,67,540,65,66,68,32,33,72,73,,544,543,547', '546,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92', ',93,101,102,,87,88,,44,45,43,231,,,,,,,,,,,,,,,,245,246,,42,,,35,,,58', '59,,,60,,37,228,,234,46,230,229,226,227,,,232,23,233,,,,85,79,81,82', '83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72', '73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91', '90,92,,93,101,102,,87,88,,44,45,43,231,235,240,241,242,237,239,,,243', '244,,,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229,226,227', '238,236,232,23,233,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57', ',62,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22', ',,,,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43', '231,-580,-580,-580,-580,237,239,,,-580,-580,,,,,,245,246,,42,,,35,,', '58,59,,,60,,37,228,,234,46,230,229,226,227,238,236,232,23,233,,,,85', '79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68', '32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100', '89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231,-580,-580,-580,-580', '237,239,,,-580,-580,,,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234', '46,230,229,226,227,238,236,232,23,233,,,,85,79,81,82,83,84,,,,80,86', '281,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30', '29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92,,93,101', '102,,87,88,,44,45,43,231,-580,-580,-580,-580,237,239,,,-580,-580,,,', ',,245,246,,42,,,283,,,58,59,,,60,,37,228,,234,46,230,229,226,227,238', '236,232,23,233,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62', ',63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,', ',,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231', '-580,-580,-580,-580,237,239,,,-580,-580,,,,,,245,246,,42,,,35,,,58,59', ',,60,,37,228,,234,46,230,229,226,227,238,236,232,23,233,,,,85,79,81', '82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33', '72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56', '91,90,92,,93,101,102,,87,88,,44,45,43,231,-580,-580,-580,-580,237,239', ',,-580,-580,,,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229', '226,227,238,236,232,23,233,,,,85,79,81,82,83,84,,,,80,86,8,69,70,71', '12,57,,62,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96', '97,,,22,,,,,,11,47,10,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88', ',44,45,43,231,235,240,241,242,237,239,247,,243,244,,,,,,245,246,,42', ',,35,,,58,59,,,60,,37,228,,234,46,230,229,226,227,238,236,232,23,233', ',,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65', '66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98', '100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231,,,,,,,,,,,,,,,,245', '246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229,226,227,,,232,23,233', ',,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65', '66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98', '100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231,,,,,,,,,,,,,,,,245', '246,,42,,,283,,,58,59,,,60,,37,228,,234,46,230,229,226,227,,,232,23', '233,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67', ',65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13', '99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231,,,,,,,,,,', ',,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229,226,227,', ',232,23,233,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63', '64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11', '47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231,-580', '-580,-580,-580,237,239,,,-580,-580,,,,,,245,246,,42,,,35,,,58,59,,,60', ',37,228,,234,46,230,229,226,227,238,236,232,23,233,,,,85,79,81,82,83', '84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72,73', ',,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90', '92,,93,101,102,,87,88,,44,45,43,231,235,240,241,242,237,239,247,248', '243,244,,-580,-580,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230', '229,226,227,238,236,232,23,233,,,,85,79,81,82,83,84,,,,80,86,281,69', '70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95', '94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87', '88,,44,45,43,231,235,240,241,242,237,239,247,248,243,244,,-580,-580', ',,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229,226,227,238', '236,232,23,233,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62', ',63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,', ',,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231', ',,,,,,,,,,,,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229', '226,227,,,,23,,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62', ',63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,', ',,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231', ',,,,,,,,,,,,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,234,46,230,229', '226,227,,,,23,,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62', ',63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,', ',,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231', ',,,,,,,,,,,,,,,245,246,,42,,,35,,,58,59,,,60,,37,228,,,46,230,229,226', '227,,,,23,,,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63', '64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11', '47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,', ',,,,,,,,,,,,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79,81,82', '83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72', '73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91', '90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,,283,,,58', '59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,281,69,70', '71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94', '96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88', ',44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23', ',,,,85,79,81,82,83,84,,,,80,86,281,69,70,71,12,57,,62,,63,64,,,,67,', '65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99', '98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,', ',,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,', '80,86,8,69,70,71,12,57,,62,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31', '30,29,95,94,96,97,,,22,,,,,,11,47,10,13,99,98,100,89,56,91,90,92,,93', '101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60,,37', ',,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63', '64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,', ',47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,', ',,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46,,,,,,,,221,,,,,85', '79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33', '72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91', '90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58', '59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,', '57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97', ',,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45', '43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,394,,,,46,,,,,,,,221,', ',,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68', '32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56', '91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,', ',58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71', ',57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97', ',,22,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43', ',,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79', '81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72', '73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92', ',93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,', '60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62', '63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,', ',,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,', ',,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82', '83,84,,,,80,86,211,69,70,71,,57,,62,,63,64,,,,67,,65,66,68,32,33,72', '73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90', '92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59', ',,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57', ',,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22', ',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', ',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81', '82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72', '73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91', '90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58', '59,,,60,,733,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71', ',57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94', '96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,', '44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,643,,,,46,,,,,,', ',221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65', '66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99', '98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,', ',,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,', ',80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294', '295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101', '102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,', '46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64', ',,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,', ',,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,', ',,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81', '82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72', '73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91', '90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58', '59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,', '57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96', '97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44', '45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,', ',,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68', '298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100', '89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,', ',222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', '69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', '95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', '88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', ',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', '65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', ',99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,', ',,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84', ',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,', '294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93', '101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,', ',,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63', '64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', ',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', ',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79', '81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299', '72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56', '91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,', ',58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70', '71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', '94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', ',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', ',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', '68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98', '100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', ',,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', '69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', '95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', '88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', ',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', '65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', ',99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,', ',,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84', ',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,', '294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93', '101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,', ',,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63', '64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', ',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', ',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79', '81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299', '72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56', '91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,', ',58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70', '71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', '94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', ',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', ',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', '68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98', '100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', ',,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', '69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', '95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', '88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', ',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', '65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', ',99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,', ',,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84', ',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,', '294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93', '101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,', ',,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63', '64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', ',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', ',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79', '81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299', '72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56', '91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,', ',58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70', '71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', '94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', ',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', ',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', '68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98', '100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', ',,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', '69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95', '94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87', '88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46', ',,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,', ',67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,', ',99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,,', ',,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46,,,,,,,,221,,,,,85,79,81', '82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73', ',,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92', '275,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59', ',,60,,273,,271,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,211,69', '70,71,,57,,62,,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', '95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102', ',87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,643,,271', ',46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64', ',,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,', ',,,47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,', ',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,271,,46,,,,,,,,221,,,,,85', '79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298', '299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89', '56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222', ',,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70', '71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', '94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', ',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', ',,,,85,79,81,82,83,84,,,,80,86,69,70,71,12,57,,,62,63,64,,,,67,,65,66', '68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,,13,99,98,100', '89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,42,,', '35,,,58,59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69', '70,71,,57,378,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', '95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', '88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,,,46,,', ',,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67', ',65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,296', ',,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,', ',,,,292,,,288,,,58,59,,,60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80', '86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29', '95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102', ',87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271', ',46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64', ',,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,', ',,,296,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,,,302,,,,,,,,', ',,,,,,,,,,,292,,,288,,,58,59,,,60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84', ',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31', '30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101', '102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,', '46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64', ',,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47', ',,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,', ',,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46,,,,,,,,221,,,,-414,85', '79,81,82,83,84,-414,-414,-414,80,86,-414,-414,-414,,-414,,,62,,,,,,-414', '-414,-414,,,,,,,,,-414,-414,,-414,-414,-414,-414,-414,,,,,,,,,,,,,,', ',,,,,,,,,-414,-414,-414,-414,-414,-414,-414,-414,-414,-414,-414,-414', '-414,-414,,,-414,-414,-414,,,-414,,261,-414,,,-414,-414,,-414,,-414', ',-414,,-414,-414,-414,-414,-414,-414,-414,,-414,-414,-414,,,,,,,,,,', ',-292,-414,-414,,-414,,-414,-292,-292,-292,,,-292,-292,-292,538,-292', '535,534,533,,536,,,,,-292,-292,,,,,,,,,-292,-292,,-292,-292,-292,-292', '-292,,,,,,,,,,540,527,,,,,,,,544,543,547,546,,-292,-292,-292,-292,-292', '-292,-292,-292,-292,-292,-292,-292,-292,-292,,,-292,-292,-292,,,-292', ',264,-292,,,-292,-292,,-292,,-292,,-292,,-292,-292,-292,-292,-292,-292', '-292,,-292,,-292,,,,,,,,,,,,,-292,-292,,-292,,-292,69,70,71,,57,,,,63', '64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,', ',47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,', ',,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46,,,,,,,,221,,,,,85', '79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33', '72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91', '90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,', ',58,59,,,60,,273,,271,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', '69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95', '94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87', '88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46', ',,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,', ',67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,', ',296,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,,,302,,,,,,,,,,', ',,,,,,,,,292,,,288,,,58,59,,,60,,287,,,,,,,,,,,,,,,,,85,79,81,82,83', '84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,', ',,,294,295,301,95,94,96,97,,,223,,,,,,,296,,,99,98,100,89,56,91,90,92', ',93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,292,,,222,,,58,59,,,60', ',,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,304,57,,,62,63', '64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', ',,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43', ',,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,643,,271,,46,,,,,,,,221,', ',,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68', '298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100', '89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', ',,222,,,58,59,,,60,,,,271,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80', '86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295', '301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102', ',87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,', ',,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,', '67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,', '47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,', ',,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82', '83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73', ',,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90', '92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59', ',,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57', ',,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223', ',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', ',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79', '81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72', '73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92', ',93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,', '60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62', '63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', ',,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43', ',,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,,,46,,,,,,,,221,,,,', '85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32', '33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91', '90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58', '59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57', ',,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22', ',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', ',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81', '82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73', ',,,,,31,30,29,95,94,96,97,,,22,,,,,616,,47,,,99,98,100,89,56,91,90,92', ',93,101,102,,87,88,,44,45,43,231,235,240,241,242,237,239,247,248,243', '244,,224,225,,,245,246,,216,,,222,,,58,59,,,60,,,228,,234,46,230,229', '226,227,238,236,232,23,233,,,,85,79,81,82,83,84,,,,80,86,107,249,69', '70,71,106,57,62,,,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', '95,94,96,97,,,223,,,,,,,296,,,99,98,100,89,56,91,90,92,,93,101,102,', '87,88,,,,302,,,,,,,,,,,,,,,,,,,,335,,,35,,,58,59,,,60,,37,,,,,,,,,,', ',,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,12,57,,,62,63,64,,,,67,,65', '66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11,47,10,13,99', '98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,', ',,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,', '80,86,69,70,71,,57,378,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31', '30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102', ',87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,', ',,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67', ',65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98', '100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', ',,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86', '69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95', '94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', ',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23', ',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', '68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89', '56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222', ',,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70', '71,12,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94', '96,97,,,22,,,,,,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88', ',44,45,43,,,,,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23', ',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', '68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89', '56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222', ',,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70', '71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96', '97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44', '45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,394,,,,46,,,,,,,,221', ',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', '68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100', '89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,', ',222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', '69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95', '94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', ',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', ',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', '68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100', '89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,', ',222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', '69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', '95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', '88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', ',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', '65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', ',99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,', ',,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84', ',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,', '294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93', '101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,', ',,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63', '64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,', ',47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,', ',,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82', '83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73', ',,,,,294,295,301,95,94,96,97,,,223,,,,,,,296,,,99,98,100,89,56,91,90', '92,,93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,913,,,222,,,58,59,,', '60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,12,57,,,62', '63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,', ',,11,47,,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,', ',,,,,,,,,,,,,,,,,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79', '81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299', '72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,296,,,99,98,100,89,56', '91,90,92,,93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,903,,,222,,,58', '59,,,60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,', '62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97', ',,223,,,,,,616,296,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,,', '302,,231,235,240,241,242,237,239,247,248,243,244,,224,225,,,245,246', '292,,,222,,,58,59,,,60,,,,228,,234,,230,229,226,227,238,236,232,,233', ',,85,79,81,82,83,84,,,,80,86,,,249,494,-240,,,62,69,70,71,12,57,,,,63', '64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,11', '47,10,13,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,', ',,,,,,,,,,,,,,42,,,35,,,58,59,,,60,,37,,,,46,,,,,,,,23,,,,,85,79,81', '82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72', '73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91', '90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58', '59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,', '57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96', '97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44', '45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,', ',,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68', '298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100', '89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', ',,222,,,58,59,,,60,,,,271,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80', '86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29', '95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', '88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', ',,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65', '66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,296,,,99', '98,100,89,56,91,90,92,,93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,292', ',,288,,,58,59,,,60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70', '71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', '94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', ',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,512,,58,59,,,60,,,,,,46,,,,,', ',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', '65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', ',99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,,', ',,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83', '84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,', ',31,30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101', '102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,', '46,,,,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64', ',,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47', ',,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,', ',,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84', ',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31', '30,29,95,94,96,97,,,22,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102', ',87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,', ',,,,,,23,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67', ',65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,296', ',,99,98,100,563,56,91,90,564,,93,101,102,,87,88,,,,302,,,,,,,,,,,,,', ',,,,,,565,,,222,,,58,59,,,60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,', '80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294', '295,301,95,94,96,97,,,223,,,,,,,296,,,99,98,100,563,56,91,90,564,,93', '101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,565,,,222,,,58,59,,,60,,,,', ',,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,', '67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,', '47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,', ',,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82', '83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73', ',,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90', '92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59', ',,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57', ',,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97', ',,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45', '43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,', '85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298', '299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89', '56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222', ',,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70', '71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', '94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', ',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', ',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', '68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100', '89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,', ',222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', '69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', '95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', '88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', ',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', '65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', ',99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,', ',,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84', ',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31', '30,29,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101', '102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273', ',271,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62', '63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', ',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', ',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,538,,535,534,533,46,536,,,,,', ',221,,,,-579,85,79,81,82,83,84,-579,-579,-579,80,86,-579,-579,-579,', '-579,,,62,,540,721,,,-579,-579,-579,,,544,543,547,546,,,-579,-579,,-579', '-579,-579,-579,-579,,,,,,,,,,,,,,,,,,,,,,,,-579,-579,-579,-579,-579', '-579,-579,-579,-579,-579,-579,-579,-579,-579,,,-579,-579,-579,,,-579', ',261,-579,,,-579,-579,,-579,,-579,,-579,,-579,-579,-579,-579,-579,-579', '-579,,-579,-579,-579,,,,,,,,,,,,,-579,-579,,-579,,-579,69,70,71,,57', ',,,63,64,,,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223', ',,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43', ',,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46,,,,,,,,221,', ',,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68', '298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100', '89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,', ',222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', '69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', '95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87', '88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,', ',,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,', '65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,', ',99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,', ',,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84', ',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,', '294,295,301,95,94,96,97,,,223,,,,,,,296,,,99,98,100,89,56,91,90,92,', '93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,292,,,288,,,58,59,,,60,', ',,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64', ',,,67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,223,,,,,,,47', ',,99,98,100,89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,', ',,,,,,,,,,216,,,222,,,58,59,,,60,,273,,271,,46,,,,,,,,221,,,,,85,79', '81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299', '72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,296,,,99,98,100,89,56', '91,90,92,,93,101,102,,87,88,,,,302,,,,,,,,,,,,,,,,,,,,292,,,288,,,58', '59,,,60,,,,,,,,,,,,,,,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,', '62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97', ',,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45', '43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,394,,,,46,,,,,,,,221,', ',,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68', '298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100', '89,56,91,90,92,275,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216', ',,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86', '69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301', '95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,275,93,101,102', ',87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,643,,,,46', ',,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,', ',67,,65,66,68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,,,47,,', '99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,', ',,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,23,,,,,85,79,81,82,83,84', ',,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,', '294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93', '101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,', ',,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63', '64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95,94,96,97,,,223', ',,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88,,44,45,43,,,', ',,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221,,,,-579,85', '79,81,82,83,84,-579,-579,-579,80,86,-579,-579,-579,,-579,,,62,,,,,,', '-579,,,,,,,,,,-579,-579,,-579,-579,-579,-579,-579,,,,,,,,,,,,,-579,', ',,,,,-579,-579,-579,,,-579,-579,-579,,-579,,,,,,-579,,,,-579,,,-579', ',,,,261,-579,-579,-579,,-579,-579,-579,-579,-579,,,,,,,,,,,,,,-579,', ',,,,,,,,,,,-579,,,,,-579,,,-579,,,,,,,-579,,,,,261,-579,,,,,,,,,,,,', ',,,,,,,,,-579,,,,,,69,70,71,,57,,,-579,63,64,,,-579,67,,65,66,68,298', '299,72,73,,,,,,294,295,301,95,94,96,97,,,223,,,,,,,47,,,99,98,100,89', '56,91,90,92,,93,101,102,,87,88,,44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222', ',,58,59,,,60,,,,,,46,,,,,,,,221,,,,,85,79,81,82,83,84,,,,80,86,69,70', '71,,57,,,62,63,64,,,,67,,65,66,68,298,299,72,73,,,,,,294,295,301,95', '94,96,97,,,223,,,,,,,47,,,99,98,100,89,56,91,90,92,,93,101,102,,87,88', ',44,45,43,,,,,,,,,,,,,,,,,,,,216,,,222,,,58,59,,,60,,,,,,46,,,,,,,,221', ',,,,85,79,81,82,83,84,,,,80,86,69,70,71,,57,,,62,63,64,,,,67,,65,66', '68,32,33,72,73,,,,,,31,30,29,95,94,96,97,,,22,,,,,600,,47,,,99,98,100', '89,56,91,90,92,,93,101,102,,87,88,,44,45,43,231,235,240,241,242,237', '239,247,248,243,244,,224,225,,,245,246,,216,,,222,,,58,59,,,60,,,228', ',234,46,230,229,226,227,238,236,232,23,233,,,,85,79,81,82,83,84,,,,80', '86,,249,,,,,,62,166,177,167,190,163,183,173,172,193,194,188,171,170', '165,191,195,196,175,164,178,182,184,176,169,,,,185,192,187,186,179,189', '174,162,181,180,,,,,,161,168,159,160,156,157,158,118,120,,,119,,,,,', ',,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141', ',,,,,,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128,,', '155,85,,,,,,,,,,86,166,177,167,190,163,183,173,172,193,194,188,171,170', '165,191,195,196,175,164,178,182,184,176,169,,,,185,192,187,186,179,189', '174,162,181,180,,,,,,161,168,159,160,156,157,158,118,120,,,119,,,,,', ',,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141', ',,,,,,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128,,', '155,85,,,,,,,,,,86,166,177,167,190,163,183,173,172,193,194,188,171,170', '165,191,195,196,175,164,178,182,184,176,169,,,,185,192,187,186,179,189', '174,162,181,180,,,,,,161,168,159,160,156,157,158,118,120,117,,119,,', ',,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140', '141,,,,,,,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128', ',,155,85,,,,,,,,,,86,166,177,167,190,163,183,173,172,193,194,188,171', '170,165,191,195,196,175,164,178,182,184,176,169,,,,185,192,187,186,179', '189,174,162,181,180,,,,,,161,168,159,160,156,157,158,118,120,,,119,', ',,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140', '141,,,,,,,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128', ',,155,85,,,,,,,,,,86,166,177,167,190,163,183,173,172,193,194,188,171', '170,165,191,195,196,175,164,178,182,184,176,169,,,,185,192,187,186,179', '189,174,162,181,180,,,,,,161,168,159,160,156,157,158,118,120,,,119,', ',,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140', '141,,,,,,,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128', ',,155,166,177,167,190,163,183,173,172,193,194,188,171,170,165,191,195', '196,175,164,178,182,184,176,169,,,,185,192,187,350,349,351,348,162,181', '180,,,,,,161,168,159,160,345,346,347,343,120,91,90,344,,93,,,,,,,151', '152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,357', ',,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128,,,155,166', '177,167,190,163,183,173,172,193,194,188,171,170,165,191,195,196,175', '164,178,182,184,176,169,,,,185,192,187,186,179,189,174,162,181,180,', ',,,,161,168,159,160,156,157,158,118,120,375,374,119,,376,,,,,,,151,152', ',148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,,,,,', ',,,145,144,,129,150,147,146,142,143,137,135,127,149,128,975,414,155', ',976,,,,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154', '140,141,,,,,,261,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127', '149,128,465,407,155,,466,,,,,,,,,151,152,,148,130,131,132,139,136,138', ',,133,134,,,,153,154,140,141,,,,,,,,,,,,,,145,144,,129,150,147,146,142', '143,137,135,127,149,128,970,414,155,,969,,,,,,,,,151,152,,148,130,131', '132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145,144', ',129,150,147,146,142,143,137,135,127,149,128,465,407,155,,466,,,,,,', ',,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141', ',,,,,,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128,621', '414,155,,622,,,,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134', ',,,153,154,140,141,,,,,,261,,,,,,,,145,144,,129,150,147,146,142,143', '137,135,127,149,128,621,414,155,,622,,,,,,,,,151,152,,148,130,131,132', '139,136,138,,,133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145,144,,129', '150,147,146,142,143,137,135,127,149,128,410,414,155,,409,,,,,,,,,151', '152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,261', ',,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149,128,403,407', '155,,404,,,,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153', '154,140,141,,,,,,261,,,,,,,,145,144,,129,150,147,146,142,143,137,135', '127,149,128,619,407,155,,620,,,,,,,,,151,152,,148,130,131,132,139,136', '138,,,133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145,144,,129,150,147', '146,142,143,137,135,127,149,128,810,414,155,,811,,,,,,,,,151,152,,148', '130,131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,261,,,,,,', ',145,144,,129,150,147,146,142,143,137,135,127,149,128,653,407,155,,654', ',,,,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140', '141,,,,,,261,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149', '128,465,407,155,,466,,,,,,,,,151,152,,148,130,131,132,139,136,138,,', '133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145,144,,129,150,147,146', '142,143,137,135,127,149,128,705,414,155,,706,,,,,,,,,151,152,,148,130', '131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145', '144,,129,150,147,146,142,143,137,135,127,149,128,973,407,155,,974,,', ',,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140', '141,,,,,,261,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149', '128,656,414,155,,657,,,,,,,,,151,152,,148,130,131,132,139,136,138,,', '133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145,144,,129,150,147,146', '142,143,137,135,127,149,128,619,407,155,,620,,,,,,,,,151,152,,148,130', '131,132,139,136,138,,,133,134,,,,153,154,140,141,,,,,,261,,,,,,,,145', '144,,129,150,147,146,142,143,137,135,127,149,128,703,407,155,,704,,', ',,,,,,151,152,,148,130,131,132,139,136,138,,,133,134,,,,153,154,140', '141,,,,,,261,,,,,,,,145,144,,129,150,147,146,142,143,137,135,127,149', '128,,,155,231,235,240,241,242,237,239,247,248,243,244,,224,225,,,245', '246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233,231,235', '240,241,242,237,239,247,248,243,244,,224,225,,249,245,246,,,,,,,,,,', ',,,,228,,234,,230,229,226,227,238,236,232,,233,231,235,240,241,242,237', '239,247,248,243,244,,224,225,,249,245,246,,,,,,,,,,,,,,,228,,234,,230', '229,226,227,238,236,232,,233,231,235,240,241,242,237,239,247,248,243', '244,,224,225,,249,245,246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238', '236,232,,233,231,235,240,241,242,237,239,247,248,243,244,,224,225,,249', '245,246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233,231', '235,240,241,242,237,239,247,248,243,244,,224,225,,249,245,246,,,,,,', ',,,,,,,,228,,234,,230,229,226,227,238,236,232,,233,231,235,240,241,242', '237,239,247,248,243,244,,224,225,,249,245,246,,,,,,,,,,,,,,,228,,234', ',230,229,226,227,238,236,232,,233,231,235,240,241,242,237,239,247,248', '243,244,,224,225,,249,245,246,,,,,,,,,,,,,,,228,,234,,230,229,226,227', '238,236,232,,233,231,235,240,241,242,237,239,247,248,243,244,,224,225', ',249,245,246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233', '231,235,240,241,242,237,239,247,248,243,244,,224,225,211,249,245,246', ',,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233,231,235,240', '241,242,237,239,247,248,243,244,,224,225,,249,245,246,,,,,,,,,,,,,,', '228,,234,,230,229,226,227,238,236,232,,233,231,235,240,241,242,237,239', '247,248,243,244,,224,225,,249,245,246,,,,,,,,,,,,,,,228,,234,,230,229', '226,227,238,236,232,,233,231,235,240,241,242,237,239,247,248,243,244', ',224,225,,249,245,246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236', '232,,233,231,235,240,241,242,237,239,247,248,243,244,,224,225,,249,245', '246,,,,,,,,,,,,,,,228,,234,,230,229,226,227,238,236,232,,233,,,,,,,', ',,,,,,,,249' ] racc_action_table = arr = ::Array.new(23604, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '621,549,549,549,549,549,549,621,621,621,549,549,621,621,621,549,621', '549,549,549,549,549,549,549,441,621,621,621,621,549,549,549,549,549', '549,549,621,621,549,621,621,621,621,621,549,549,857,549,549,549,549', '549,549,549,549,549,569,549,549,549,988,549,549,326,549,549,549,621', '621,621,621,621,621,621,621,621,621,621,621,621,621,61,429,621,621,621', '549,621,621,549,526,621,549,549,621,621,549,621,549,621,369,621,549', '621,621,621,621,621,621,621,549,621,621,621,333,549,549,549,549,549', '549,808,809,561,549,549,621,621,621,621,410,621,325,549,621,621,297', '410,410,410,553,620,704,410,410,706,410,336,554,703,928,77,928,332,347', '410,807,22,974,77,857,347,569,369,753,857,410,410,61,410,410,410,410', '410,988,717,419,326,411,988,717,569,326,705,619,878,569,973,975,620', '427,427,402,22,724,724,526,410,410,410,410,410,410,410,410,410,410,410', '410,410,410,706,753,410,410,410,565,410,346,333,565,410,809,297,410', '346,808,809,561,410,214,410,619,410,410,410,410,410,410,410,553,410', '410,410,401,553,325,704,554,705,706,325,336,554,703,92,410,410,332,410', '732,410,92,92,92,410,975,92,92,92,807,92,974,807,398,807,463,974,214', '92,427,92,92,92,724,473,653,472,705,664,664,92,92,215,92,92,92,92,92', '878,654,973,975,41,878,395,973,975,28,874,463,874,874,874,648,874,392', '217,737,473,648,472,92,92,92,92,92,92,92,92,92,92,92,92,92,92,635,344', '92,92,92,215,92,92,344,41,92,810,588,92,92,41,92,653,92,433,92,390,92', '92,92,92,92,92,92,217,92,654,92,371,635,368,687,28,687,687,687,365,687', '664,772,92,92,92,92,409,92,874,653,92,92,653,409,409,409,28,755,653', '409,409,810,409,654,433,756,654,439,810,343,588,588,654,810,656,117', '343,810,757,588,117,117,409,409,759,409,409,409,409,409,18,371,371,371', '772,810,20,20,760,439,306,772,348,439,439,564,366,722,763,348,772,687', '722,409,409,409,409,409,409,409,409,409,409,409,409,409,409,656,772', '409,409,409,18,409,656,563,337,409,18,656,409,363,306,656,363,409,771', '409,306,409,409,409,409,409,409,409,361,409,564,409,317,656,359,317', '335,564,775,366,366,366,564,622,409,409,564,409,331,409,622,622,622', '409,778,622,622,622,601,622,563,40,524,817,564,524,351,563,817,622,622', '622,563,351,363,363,563,718,718,622,622,350,622,622,622,622,622,404', '350,361,361,361,293,779,563,359,359,359,349,293,601,669,887,40,669,349', '601,887,293,40,622,622,622,622,622,622,622,622,622,622,622,622,622,622', '783,17,622,622,622,404,622,622,17,784,622,404,27,622,622,785,622,17', '622,27,622,786,622,622,622,622,622,622,622,787,622,628,622,628,628,628', '540,628,540,540,540,318,540,790,318,622,622,622,622,89,622,403,345,622', '622,278,89,89,89,345,278,89,89,89,952,89,952,952,952,628,952,692,692', '89,540,89,89,89,628,628,628,628,791,540,793,89,89,48,89,89,89,89,89', '403,48,329,5,795,353,403,329,5,952,48,796,353,796,796,796,330,796,628', '797,952,952,800,89,89,89,89,89,89,89,89,89,89,89,89,89,89,803,213,89', '89,89,319,89,89,213,311,89,308,796,89,89,13,89,213,89,813,89,796,89', '89,89,89,89,89,89,307,89,676,89,676,676,676,289,676,488,488,488,488', '488,289,290,89,89,89,89,415,89,290,289,89,89,303,415,415,415,818,290', '415,415,415,939,415,939,939,939,676,939,324,324,819,415,415,415,415', '676,676,676,676,315,315,820,415,415,291,415,415,415,415,415,956,291', '956,956,956,829,956,302,302,939,291,684,830,684,684,684,301,684,958', '958,939,939,296,415,415,415,415,415,415,415,415,415,415,415,415,415', '415,295,956,415,415,415,1,440,415,43,43,415,292,684,415,415,286,415', '843,415,844,415,684,415,415,415,415,415,415,415,285,415,415,415,937', '849,937,937,937,440,937,284,851,440,440,309,415,415,415,415,414,415', '309,852,415,282,275,414,414,414,272,309,414,414,414,934,414,934,934', '934,458,934,937,269,268,414,414,414,414,257,254,876,223,937,937,880', '414,414,334,414,414,414,414,414,921,334,921,921,921,881,921,219,458', '934,334,218,458,458,458,458,886,216,934,934,934,934,894,414,414,414', '414,414,414,414,414,414,414,414,414,414,414,895,921,414,414,414,499', '896,414,897,899,414,903,499,414,414,905,414,197,414,990,414,499,414', '414,414,414,414,414,414,977,414,414,414,984,978,984,984,984,913,984', '916,917,459,918,567,414,414,414,414,56,414,567,919,414,920,922,56,56', '56,115,567,56,56,56,892,56,892,892,892,84,892,984,83,69,459,56,56,56', '459,459,459,459,984,984,47,56,56,42,56,56,56,56,56,923,39,923,923,923', '946,923,25,3,892,892,798,19,798,798,798,16,798,892,892,892,892,957,56', '56,56,56,56,56,56,56,56,56,56,56,56,56,962,923,56,56,56,963,964,56,965', '966,56,967,798,56,56,968,56,969,56,970,56,613,56,56,56,56,56,56,56,607', '56,870,56,870,870,870,709,870,647,647,647,647,647,709,902,56,56,56,56', '602,56,902,709,56,719,719,719,719,719,719,902,725,725,719,719,725,725', '725,719,870,719,719,719,719,719,719,719,598,594,623,870,870,719,719', '719,719,719,719,719,592,762,719,762,762,762,625,762,719,719,640,719', '719,719,719,719,719,719,719,719,556,719,719,719,642,719,719,555,719', '719,719,550,875,650,875,875,875,868,875,868,868,868,657,868,652,910', '548,545,911,657,719,655,910,719,657,911,719,719,657,538,719,910,719', '972,911,866,719,866,866,866,875,866,658,659,719,868,531,530,662,719', '719,719,719,719,719,663,868,868,719,719,804,804,804,804,804,804,529', '719,665,804,804,525,522,866,804,675,804,804,804,804,804,804,804,515', '866,866,514,513,804,804,804,804,804,804,804,504,901,804,901,901,901', '500,901,804,804,686,804,804,804,804,804,804,804,804,804,811,804,804', '804,495,804,804,811,804,804,804,912,811,689,694,914,811,841,912,841', '841,841,914,841,699,950,493,912,702,490,804,914,950,804,489,475,804', '804,474,15,804,950,804,444,443,442,804,863,,863,863,863,,863,804,841', ',,,804,804,804,804,804,804,,841,841,804,804,552,552,552,552,552,552', ',804,,552,552,,,,552,863,552,552,552,552,552,552,552,,863,863,863,863', '552,552,552,552,552,552,552,,,552,280,280,280,280,280,552,552,,552,552', '552,552,552,552,552,552,552,976,552,552,552,,552,552,976,552,552,552', ',976,,,,976,681,,681,681,681,,681,9,9,9,9,9,,552,,,552,,,552,552,,,552', ',552,,,,552,838,,838,838,838,,838,552,681,,,,552,552,552,552,552,552', ',681,681,552,552,909,909,909,909,909,909,,552,,909,909,,,,909,838,909', '909,909,909,909,909,909,,838,838,838,838,909,909,909,909,909,909,909', ',,909,,,,,,909,909,,909,909,909,909,909,909,909,909,909,,909,909,909', ',909,909,,909,909,909,,,,,,,,,,,,,,,,,,,,909,,,909,,,909,909,,,909,', '909,,,,909,836,,836,836,836,,836,909,,,,,909,909,909,909,909,909,,,', '909,909,199,199,199,199,199,199,,909,,199,199,,,,199,836,199,199,199', '199,199,199,199,,836,836,836,836,199,199,199,199,199,199,199,,,199,', ',,,,199,199,,199,199,199,199,199,199,199,199,199,,199,199,199,,199,199', ',199,199,199,,,,,,,,,,,,,,,,,,,,199,,,199,,,199,199,,,199,,199,,,,199', '721,,721,721,721,,721,199,,,,,199,199,199,199,199,199,,,,199,199,720', '720,720,720,720,720,,199,,720,720,,,,720,721,720,720,720,720,720,720', '720,,721,721,721,721,720,720,720,720,720,720,720,,,720,,,,,,720,720', ',720,720,720,720,720,720,720,720,720,,720,720,720,,720,720,,720,720', '720,,,,,,,,,,,,,,,,,,,,720,,,720,,,720,720,,,720,,720,,,,720,678,,678', '678,678,,678,720,,,,,720,720,720,720,720,720,,,,720,720,765,765,765', '765,765,765,,720,,765,765,,,,765,678,765,765,765,765,765,765,765,,678', '678,678,678,765,765,765,765,765,765,765,,,765,,,,,,765,765,,765,765', '765,765,765,765,765,765,765,,765,765,765,,765,765,,765,765,765,,,,,', ',,,,,,,,,,,,,,765,,,765,,,765,765,,,765,,765,,,,765,527,,527,527,527', ',527,765,,,,,765,765,765,765,765,765,,,,765,765,805,805,805,805,805', '805,,765,,805,805,,,,805,527,805,805,805,805,805,805,805,,527,527,527', '527,805,805,805,805,805,805,805,,,805,,,,,,805,805,,805,805,805,805', '805,805,805,805,805,,805,805,805,,805,805,,805,805,805,452,,,,,,,,,', ',,,,,,452,452,,805,,,805,,,805,805,,,805,,805,452,,452,805,452,452,452', '452,,,452,805,452,,,,805,805,805,805,805,805,,,,805,805,314,314,314', '314,314,314,,805,,314,314,,,,314,,314,314,314,314,314,314,314,,,,,,314', '314,314,314,314,314,314,,,314,,,,,,314,314,,314,314,314,314,314,314', '314,314,314,,314,314,314,,314,314,,314,314,314,460,460,460,460,460,460', '460,,,460,460,,,,,,460,460,,314,,,314,,,314,314,,,314,,314,460,,460', '314,460,460,460,460,460,460,460,314,460,,,,314,314,314,314,314,314,', ',,314,314,674,674,674,674,674,674,,314,,674,674,,,,674,,674,674,674', '674,674,674,674,,,,,,674,674,674,674,674,674,674,,,674,,,,,,674,674', ',674,674,674,674,674,674,674,674,674,,674,674,674,,674,674,,674,674', '674,457,457,457,457,457,457,457,,,457,457,,,,,,457,457,,674,,,674,,', '674,674,,,674,,674,457,,457,674,457,457,457,457,457,457,457,674,457', ',,,674,674,674,674,674,674,,,,674,674,767,767,767,767,767,767,,674,', '767,767,,,,767,,767,767,767,767,767,767,767,,,,,,767,767,767,767,767', '767,767,,,767,,,,,,767,767,,767,767,767,767,767,767,767,767,767,,767', '767,767,,767,767,,767,767,767,456,456,456,456,456,456,456,,,456,456', ',,,,,456,456,,767,,,767,,,767,767,,,767,,767,456,,456,767,456,456,456', '456,456,456,456,767,456,,,,767,767,767,767,767,767,,,,767,767,35,35', '35,35,35,35,,767,,35,35,,,,35,,35,35,35,35,35,35,35,,,,,,35,35,35,35', '35,35,35,,,35,,,,,,35,35,,35,35,35,35,35,35,35,35,35,,35,35,35,,35,35', ',35,35,35,455,455,455,455,455,455,455,,,455,455,,,,,,455,455,,35,,,35', ',,35,35,,,35,,35,455,,455,35,455,455,455,455,455,455,455,35,455,,,,35', '35,35,35,35,35,,,,35,35,673,673,673,673,673,673,,35,,673,673,,,,673', ',673,673,673,673,673,673,673,,,,,,673,673,673,673,673,673,673,,,673', ',,,,,673,673,,673,673,673,673,673,673,673,673,673,,673,673,673,,673', '673,,673,673,673,454,454,454,454,454,454,454,,,454,454,,,,,,454,454', ',673,,,673,,,673,673,,,673,,673,454,,454,673,454,454,454,454,454,454', '454,673,454,,,,673,673,673,673,673,673,,,,673,673,726,726,726,726,726', '726,,673,,726,726,,,,726,,726,726,726,726,726,726,726,,,,,,726,726,726', '726,726,726,726,,,726,,,,,,726,726,,726,726,726,726,726,726,726,726', '726,,726,726,726,,726,726,,726,726,726,453,453,453,453,453,453,453,', ',453,453,,,,,,453,453,,726,,,726,,,726,726,,,726,,726,453,,453,726,453', '453,453,453,453,453,453,726,453,,,,726,726,726,726,726,726,,,,726,726', '2,2,2,2,2,2,,726,,2,2,,,,2,,2,2,2,2,2,2,2,,,,,,2,2,2,2,2,2,2,,,2,,,', ',,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2,,2,2,2,461,461,461,461,461,461', '461,461,,461,461,,,,,,461,461,,2,,,2,,,2,2,,,2,,2,461,,461,2,461,461', '461,461,461,461,461,2,461,,,,2,2,2,2,2,2,,,,2,2,850,850,850,850,850', '850,,2,,850,850,,,,850,,850,850,850,850,850,850,850,,,,,,850,850,850', '850,850,850,850,,,850,,,,,,850,850,,850,850,850,850,850,850,850,850', '850,,850,850,850,,850,850,,850,850,850,451,,,,,,,,,,,,,,,,451,451,,850', ',,850,,,850,850,,,850,,850,451,,451,850,451,451,451,451,,,451,850,451', ',,,850,850,850,850,850,850,,,,850,850,283,283,283,283,283,283,,850,', '283,283,,,,283,,283,283,283,283,283,283,283,,,,,,283,283,283,283,283', '283,283,,,283,,,,,,283,283,,283,283,283,283,283,283,283,283,283,,283', '283,283,,283,283,,283,283,283,450,,,,,,,,,,,,,,,,450,450,,283,,,283', ',,283,283,,,283,,283,450,,450,283,450,450,450,450,,,450,283,450,,,,283', '283,283,283,283,283,,,,283,283,933,933,933,933,933,933,,283,,933,933', ',,,933,,933,933,933,933,933,933,933,,,,,,933,933,933,933,933,933,933', ',,933,,,,,,933,933,,933,933,933,933,933,933,933,933,933,,933,933,933', ',933,933,,933,933,933,449,,,,,,,,,,,,,,,,449,449,,933,,,933,,,933,933', ',,933,,933,449,,449,933,449,449,449,449,,,449,933,449,,,,933,933,933', '933,933,933,,,,933,933,854,854,854,854,854,854,,933,,854,854,,,,854', ',854,854,854,854,854,854,854,,,,,,854,854,854,854,854,854,854,,,854', ',,,,,854,854,,854,854,854,854,854,854,854,854,854,,854,854,854,,854', '854,,854,854,854,448,448,448,448,448,448,448,,,448,448,,,,,,448,448', ',854,,,854,,,854,854,,,854,,854,448,,448,854,448,448,448,448,448,448', '448,854,448,,,,854,854,854,854,854,854,,,,854,854,814,814,814,814,814', '814,,854,,814,814,,,,814,,814,814,814,814,814,814,814,,,,,,814,814,814', '814,814,814,814,,,814,,,,,,814,814,,814,814,814,814,814,814,814,814', '814,,814,814,814,,814,814,,814,814,814,438,438,438,438,438,438,438,438', '438,438,438,,438,438,,,438,438,,814,,,814,,,814,814,,,814,,814,438,', '438,814,438,438,438,438,438,438,438,814,438,,,,814,814,814,814,814,814', ',,,814,814,768,768,768,768,768,768,,814,,768,768,,,,768,,768,768,768', '768,768,768,768,,,,,,768,768,768,768,768,768,768,,,768,,,,,,768,768', ',768,768,768,768,768,768,768,768,768,,768,768,768,,768,768,,768,768', '768,437,437,437,437,437,437,437,437,437,437,437,,437,437,,,437,437,', '768,,,768,,,768,768,,,768,,768,437,,437,768,437,437,437,437,437,437', '437,768,437,,,,768,768,768,768,768,768,,,,768,768,883,883,883,883,883', '883,,768,,883,883,,,,883,,883,883,883,883,883,883,883,,,,,,883,883,883', '883,883,883,883,,,883,,,,,,883,883,,883,883,883,883,883,883,883,883', '883,,883,883,883,,883,883,,883,883,883,445,,,,,,,,,,,,,,,,445,445,,883', ',,883,,,883,883,,,883,,883,445,,445,883,445,445,445,445,,,,883,,,,,883', '883,883,883,883,883,,,,883,883,932,932,932,932,932,932,,883,,932,932', ',,,932,,932,932,932,932,932,932,932,,,,,,932,932,932,932,932,932,932', ',,932,,,,,,932,932,,932,932,932,932,932,932,932,932,932,,932,932,932', ',932,932,,932,932,932,446,,,,,,,,,,,,,,,,446,446,,932,,,932,,,932,932', ',,932,,932,446,,446,932,446,446,446,446,,,,932,,,,,932,932,932,932,932', '932,,,,932,932,929,929,929,929,929,929,,932,,929,929,,,,929,,929,929', '929,929,929,929,929,,,,,,929,929,929,929,929,929,929,,,929,,,,,,929', '929,,929,929,929,929,929,929,929,929,929,,929,929,929,,929,929,,929', '929,929,447,,,,,,,,,,,,,,,,447,447,,929,,,929,,,929,929,,,929,,929,447', ',,929,447,447,447,447,,,,929,,,,,929,929,929,929,929,929,,,,929,929', '222,222,222,222,222,222,,929,,222,222,,,,222,,222,222,222,222,222,222', '222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,222,222,,222,222,222', '222,222,222,222,222,222,,222,222,222,,222,222,,222,222,222,,,,,,,,,', ',,,,,,,,,,222,,,222,,,222,222,,,222,,222,,,,222,,,,,,,,222,,,,,222,222', '222,222,222,222,,,,222,222,288,288,288,288,288,288,,222,,288,288,,,', '288,,288,288,288,288,288,288,288,,,,,,288,288,288,288,288,288,288,,', '288,,,,,,288,288,,288,288,288,288,288,288,288,288,288,,288,288,288,', '288,288,,288,288,288,,,,,,,,,,,,,,,,,,,,288,,,288,,,288,288,,,288,,288', ',,,288,,,,,,,,288,,,,,288,288,288,288,288,288,,,,288,288,924,924,924', '924,924,924,,288,,924,924,,,,924,,924,924,924,924,924,924,924,,,,,,924', '924,924,924,924,924,924,,,924,,,,,,924,924,,924,924,924,924,924,924', '924,924,924,,924,924,924,,924,924,,924,924,924,,,,,,,,,,,,,,,,,,,,924', ',,924,,,924,924,,,924,,924,,,,924,,,,,,,,924,,,,,924,924,924,924,924', '924,,,,924,924,777,777,777,777,777,777,,924,,777,777,,,,777,,777,777', '777,777,777,777,777,,,,,,777,777,777,777,777,777,777,,,777,,,,,,777', '777,,777,777,777,777,777,777,777,777,777,,777,777,777,,777,777,,777', '777,777,,,,,,,,,,,,,,,,,,,,777,,,777,,,777,777,,,777,,777,,,,777,,,', ',,,,777,,,,,777,777,777,777,777,777,,,,777,777,384,384,384,384,384,384', ',777,,384,384,,,,384,,384,384,384,384,384,384,384,,,,,,384,384,384,384', '384,384,384,,,384,,,,,,384,384,384,384,384,384,384,384,384,384,384,384', ',384,384,384,,384,384,,384,384,384,,,,,,,,,,,,,,,,,,,,384,,,384,,,384', '384,,,384,,384,,,,384,,,,,,,,384,,,,,384,384,384,384,384,384,,,,384', '384,202,202,202,,202,,,384,202,202,,,,202,,202,202,202,202,202,202,202', ',,,,,202,202,202,202,202,202,202,,,202,,,,,,,202,,,202,202,202,202,202', '202,202,202,202,202,202,202,,202,202,,202,202,202,,,,,,,,,,,,,,,,,,', ',202,,,202,,,202,202,,,202,,202,,202,,202,,,,,,,,202,,,,,202,202,202', '202,202,202,,,,202,202,205,205,205,,205,,,202,205,205,,,,205,,205,205', '205,205,205,205,205,,,,,,205,205,205,205,205,205,205,,,205,,,,,,,205', ',,205,205,205,205,205,205,205,205,,205,205,205,,205,205,,205,205,205', ',,,,,,,,,,,,,,,,,,,205,,,205,,,205,205,,,205,,,,,,205,,,,,,,,205,,,', ',205,205,205,205,205,205,,,,205,205,206,206,206,,206,,,205,206,206,', ',,206,,206,206,206,206,206,206,206,,,,,,206,206,206,206,206,206,206', ',,206,,,,,,,206,,,206,206,206,206,206,206,206,206,,206,206,206,,206', '206,,206,206,206,,,,,,,,,,,,,,,,,,,,206,,,206,,,206,206,,,206,,206,', ',,206,,,,,,,,206,,,,,206,206,206,206,206,206,,,,206,206,207,207,207', ',207,,,206,207,207,,,,207,,207,207,207,207,207,207,207,,,,,,207,207', '207,207,207,207,207,,,207,,,,,,,207,,,207,207,207,207,207,207,207,207', ',207,207,207,,207,207,,207,207,207,,,,,,,,,,,,,,,,,,,,207,,,207,,,207', '207,,,207,,,,,,207,,,,,,,,207,,,,,207,207,207,207,207,207,,,,207,207', '208,208,208,,208,,,207,208,208,,,,208,,208,208,208,208,208,208,208,', ',,,,208,208,208,208,208,208,208,,,208,,,,,,,208,,,208,208,208,208,208', '208,208,208,,208,208,208,,208,208,,208,208,208,,,,,,,,,,,,,,,,,,,,208', ',,208,,,208,208,,,208,,,,,,208,,,,,,,,208,,,,,208,208,208,208,208,208', ',,,208,208,209,209,209,,209,,,208,209,209,,,,209,,209,209,209,209,209', '209,209,,,,,,209,209,209,209,209,209,209,,,209,,,,,,,209,,,209,209,209', '209,209,209,209,209,,209,209,209,,209,209,,209,209,209,,,,,,,,,,,,,', ',,,,,,209,,,209,,,209,209,,,209,,,,,,209,,,,,,,,209,,,,,209,209,209', '209,209,209,,,,209,209,210,210,210,,210,,,209,210,210,,,,210,,210,210', '210,210,210,210,210,,,,,,210,210,210,210,210,210,210,,,210,,,,,,,210', ',,210,210,210,210,210,210,210,210,,210,210,210,,210,210,,210,210,210', ',,,,,,,,,,,,,,,,,,,210,,,210,,,210,210,,,210,,,,,,210,,,,,,,,210,,,', ',210,210,210,210,210,210,,,,210,210,210,606,606,606,,606,,210,,606,606', ',,,606,,606,606,606,606,606,606,606,,,,,,606,606,606,606,606,606,606', ',,606,,,,,,,606,,,606,606,606,606,606,606,606,606,,606,606,606,,606', '606,,606,606,606,,,,,,,,,,,,,,,,,,,,606,,,606,,,606,606,,,606,,,,,,606', ',,,,,,,606,,,,,606,606,606,606,606,606,,,,606,606,570,570,570,,570,', ',606,570,570,,,,570,,570,570,570,570,570,570,570,,,,,,570,570,570,570', '570,570,570,,,570,,,,,,,570,,,570,570,570,570,570,570,570,570,,570,570', '570,,570,570,,570,570,570,,,,,,,,,,,,,,,,,,,,570,,,570,,,570,570,,,570', ',,,,,570,,,,,,,,570,,,,,570,570,570,570,570,570,,,,570,570,599,599,599', ',599,,,570,599,599,,,,599,,599,599,599,599,599,599,599,,,,,,599,599', '599,599,599,599,599,,,599,,,,,,,599,,,599,599,599,599,599,599,599,599', ',599,599,599,,599,599,,599,599,599,,,,,,,,,,,,,,,,,,,,599,,,599,,,599', '599,,,599,,599,,,,599,,,,,,,,599,,,,,599,599,599,599,599,599,,,,599', '599,882,882,882,,882,,,599,882,882,,,,882,,882,882,882,882,882,882,882', ',,,,,882,882,882,882,882,882,882,,,882,,,,,,,882,,,882,882,882,882,882', '882,882,882,,882,882,882,,882,882,,882,882,882,,,,,,,,,,,,,,,,,,,,882', ',,882,,,882,882,,,882,,882,,,,882,,,,,,,,882,,,,,882,882,882,882,882', '882,,,,882,882,221,221,221,,221,,,882,221,221,,,,221,,221,221,221,221', '221,221,221,,,,,,221,221,221,221,221,221,221,,,221,,,,,,,221,,,221,221', '221,221,221,221,221,221,,221,221,221,,221,221,,221,221,221,,,,,,,,,', ',,,,,,,,,,221,,,221,,,221,221,,,221,,,,,,221,,,,,,,,221,,,,,221,221', '221,221,221,221,,,,221,221,224,224,224,,224,,,221,224,224,,,,224,,224', '224,224,224,224,224,224,,,,,,224,224,224,224,224,224,224,,,224,,,,,', ',224,,,224,224,224,224,224,224,224,224,,224,224,224,,224,224,,224,224', '224,,,,,,,,,,,,,,,,,,,,224,,,224,,,224,224,,,224,,,,,,224,,,,,,,,224', ',,,,224,224,224,224,224,224,,,,224,224,225,225,225,,225,,,224,225,225', ',,,225,,225,225,225,225,225,225,225,,,,,,225,225,225,225,225,225,225', ',,225,,,,,,,225,,,225,225,225,225,225,225,225,225,,225,225,225,,225', '225,,225,225,225,,,,,,,,,,,,,,,,,,,,225,,,225,,,225,225,,,225,,,,,,225', ',,,,,,,225,,,,,225,225,225,225,225,225,,,,225,225,226,226,226,,226,', ',225,226,226,,,,226,,226,226,226,226,226,226,226,,,,,,226,226,226,226', '226,226,226,,,226,,,,,,,226,,,226,226,226,226,226,226,226,226,,226,226', '226,,226,226,,226,226,226,,,,,,,,,,,,,,,,,,,,226,,,226,,,226,226,,,226', ',,,,,226,,,,,,,,226,,,,,226,226,226,226,226,226,,,,226,226,227,227,227', ',227,,,226,227,227,,,,227,,227,227,227,227,227,227,227,,,,,,227,227', '227,227,227,227,227,,,227,,,,,,,227,,,227,227,227,227,227,227,227,227', ',227,227,227,,227,227,,227,227,227,,,,,,,,,,,,,,,,,,,,227,,,227,,,227', '227,,,227,,,,,,227,,,,,,,,227,,,,,227,227,227,227,227,227,,,,227,227', '228,228,228,,228,,,227,228,228,,,,228,,228,228,228,228,228,228,228,', ',,,,228,228,228,228,228,228,228,,,228,,,,,,,228,,,228,228,228,228,228', '228,228,228,,228,228,228,,228,228,,228,228,228,,,,,,,,,,,,,,,,,,,,228', ',,228,,,228,228,,,228,,,,,,228,,,,,,,,228,,,,,228,228,228,228,228,228', ',,,228,228,229,229,229,,229,,,228,229,229,,,,229,,229,229,229,229,229', '229,229,,,,,,229,229,229,229,229,229,229,,,229,,,,,,,229,,,229,229,229', '229,229,229,229,229,,229,229,229,,229,229,,229,229,229,,,,,,,,,,,,,', ',,,,,,229,,,229,,,229,229,,,229,,,,,,229,,,,,,,,229,,,,,229,229,229', '229,229,229,,,,229,229,230,230,230,,230,,,229,230,230,,,,230,,230,230', '230,230,230,230,230,,,,,,230,230,230,230,230,230,230,,,230,,,,,,,230', ',,230,230,230,230,230,230,230,230,,230,230,230,,230,230,,230,230,230', ',,,,,,,,,,,,,,,,,,,230,,,230,,,230,230,,,230,,,,,,230,,,,,,,,230,,,', ',230,230,230,230,230,230,,,,230,230,231,231,231,,231,,,230,231,231,', ',,231,,231,231,231,231,231,231,231,,,,,,231,231,231,231,231,231,231', ',,231,,,,,,,231,,,231,231,231,231,231,231,231,231,,231,231,231,,231', '231,,231,231,231,,,,,,,,,,,,,,,,,,,,231,,,231,,,231,231,,,231,,,,,,231', ',,,,,,,231,,,,,231,231,231,231,231,231,,,,231,231,232,232,232,,232,', ',231,232,232,,,,232,,232,232,232,232,232,232,232,,,,,,232,232,232,232', '232,232,232,,,232,,,,,,,232,,,232,232,232,232,232,232,232,232,,232,232', '232,,232,232,,232,232,232,,,,,,,,,,,,,,,,,,,,232,,,232,,,232,232,,,232', ',,,,,232,,,,,,,,232,,,,,232,232,232,232,232,232,,,,232,232,233,233,233', ',233,,,232,233,233,,,,233,,233,233,233,233,233,233,233,,,,,,233,233', '233,233,233,233,233,,,233,,,,,,,233,,,233,233,233,233,233,233,233,233', ',233,233,233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,,,233', '233,,,233,,,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233,233', '234,234,234,,234,,,233,234,234,,,,234,,234,234,234,234,234,234,234,', ',,,,234,234,234,234,234,234,234,,,234,,,,,,,234,,,234,234,234,234,234', '234,234,234,,234,234,234,,234,234,,234,234,234,,,,,,,,,,,,,,,,,,,,234', ',,234,,,234,234,,,234,,,,,,234,,,,,,,,234,,,,,234,234,234,234,234,234', ',,,234,234,235,235,235,,235,,,234,235,235,,,,235,,235,235,235,235,235', '235,235,,,,,,235,235,235,235,235,235,235,,,235,,,,,,,235,,,235,235,235', '235,235,235,235,235,,235,235,235,,235,235,,235,235,235,,,,,,,,,,,,,', ',,,,,,235,,,235,,,235,235,,,235,,,,,,235,,,,,,,,235,,,,,235,235,235', '235,235,235,,,,235,235,236,236,236,,236,,,235,236,236,,,,236,,236,236', '236,236,236,236,236,,,,,,236,236,236,236,236,236,236,,,236,,,,,,,236', ',,236,236,236,236,236,236,236,236,,236,236,236,,236,236,,236,236,236', ',,,,,,,,,,,,,,,,,,,236,,,236,,,236,236,,,236,,,,,,236,,,,,,,,236,,,', ',236,236,236,236,236,236,,,,236,236,237,237,237,,237,,,236,237,237,', ',,237,,237,237,237,237,237,237,237,,,,,,237,237,237,237,237,237,237', ',,237,,,,,,,237,,,237,237,237,237,237,237,237,237,,237,237,237,,237', '237,,237,237,237,,,,,,,,,,,,,,,,,,,,237,,,237,,,237,237,,,237,,,,,,237', ',,,,,,,237,,,,,237,237,237,237,237,237,,,,237,237,238,238,238,,238,', ',237,238,238,,,,238,,238,238,238,238,238,238,238,,,,,,238,238,238,238', '238,238,238,,,238,,,,,,,238,,,238,238,238,238,238,238,238,238,,238,238', '238,,238,238,,238,238,238,,,,,,,,,,,,,,,,,,,,238,,,238,,,238,238,,,238', ',,,,,238,,,,,,,,238,,,,,238,238,238,238,238,238,,,,238,238,239,239,239', ',239,,,238,239,239,,,,239,,239,239,239,239,239,239,239,,,,,,239,239', '239,239,239,239,239,,,239,,,,,,,239,,,239,239,239,239,239,239,239,239', ',239,239,239,,239,239,,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239,,,239', '239,,,239,,,,,,239,,,,,,,,239,,,,,239,239,239,239,239,239,,,,239,239', '240,240,240,,240,,,239,240,240,,,,240,,240,240,240,240,240,240,240,', ',,,,240,240,240,240,240,240,240,,,240,,,,,,,240,,,240,240,240,240,240', '240,240,240,,240,240,240,,240,240,,240,240,240,,,,,,,,,,,,,,,,,,,,240', ',,240,,,240,240,,,240,,,,,,240,,,,,,,,240,,,,,240,240,240,240,240,240', ',,,240,240,241,241,241,,241,,,240,241,241,,,,241,,241,241,241,241,241', '241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241,241,241', '241,241,241,241,241,,241,241,241,,241,241,,241,241,241,,,,,,,,,,,,,', ',,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,241,,,,,241,241,241', '241,241,241,,,,241,241,242,242,242,,242,,,241,242,242,,,,242,,242,242', '242,242,242,242,242,,,,,,242,242,242,242,242,242,242,,,242,,,,,,,242', ',,242,242,242,242,242,242,242,242,,242,242,242,,242,242,,242,242,242', ',,,,,,,,,,,,,,,,,,,242,,,242,,,242,242,,,242,,,,,,242,,,,,,,,242,,,', ',242,242,242,242,242,242,,,,242,242,243,243,243,,243,,,242,243,243,', ',,243,,243,243,243,243,243,243,243,,,,,,243,243,243,243,243,243,243', ',,243,,,,,,,243,,,243,243,243,243,243,243,243,243,,243,243,243,,243', '243,,243,243,243,,,,,,,,,,,,,,,,,,,,243,,,243,,,243,243,,,243,,,,,,243', ',,,,,,,243,,,,,243,243,243,243,243,243,,,,243,243,244,244,244,,244,', ',243,244,244,,,,244,,244,244,244,244,244,244,244,,,,,,244,244,244,244', '244,244,244,,,244,,,,,,,244,,,244,244,244,244,244,244,244,244,,244,244', '244,,244,244,,244,244,244,,,,,,,,,,,,,,,,,,,,244,,,244,,,244,244,,,244', ',,,,,244,,,,,,,,244,,,,,244,244,244,244,244,244,,,,244,244,245,245,245', ',245,,,244,245,245,,,,245,,245,245,245,245,245,245,245,,,,,,245,245', '245,245,245,245,245,,,245,,,,,,,245,,,245,245,245,245,245,245,245,245', ',245,245,245,,245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245,,,245,,,245', '245,,,245,,,,,,245,,,,,,,,245,,,,,245,245,245,245,245,245,,,,245,245', '246,246,246,,246,,,245,246,246,,,,246,,246,246,246,246,246,246,246,', ',,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246,246,246,246,246', '246,246,246,,246,246,246,,246,246,,246,246,246,,,,,,,,,,,,,,,,,,,,246', ',,246,,,246,246,,,246,,,,,,246,,,,,,,,246,,,,,246,246,246,246,246,246', ',,,246,246,247,247,247,,247,,,246,247,247,,,,247,,247,247,247,247,247', '247,247,,,,,,247,247,247,247,247,247,247,,,247,,,,,,,247,,,247,247,247', '247,247,247,247,247,,247,247,247,,247,247,,247,247,247,,,,,,,,,,,,,', ',,,,,,247,,,247,,,247,247,,,247,,,,,,247,,,,,,,,247,,,,,247,247,247', '247,247,247,,,,247,247,248,248,248,,248,,,247,248,248,,,,248,,248,248', '248,248,248,248,248,,,,,,248,248,248,248,248,248,248,,,248,,,,,,,248', ',,248,248,248,248,248,248,248,248,,248,248,248,,248,248,,248,248,248', ',,,,,,,,,,,,,,,,,,,248,,,248,,,248,248,,,248,,,,,,248,,,,,,,,248,,,', ',248,248,248,248,248,248,,,,248,248,249,249,249,,249,,,248,249,249,', ',,249,,249,249,249,249,249,249,249,,,,,,249,249,249,249,249,249,249', ',,249,,,,,,,249,,,249,249,249,249,249,249,249,249,,249,249,249,,249', '249,,249,249,249,,,,,,,,,,,,,,,,,,,,249,,,249,,,249,249,,,249,,,,,,249', ',,,,,,,249,,,,,249,249,249,249,249,249,,,,249,249,255,255,255,,255,', ',249,255,255,,,,255,,255,255,255,255,255,255,255,,,,,,255,255,255,255', '255,255,255,,,255,,,,,,,255,,,255,255,255,255,255,255,255,255,255,255', '255,255,,255,255,,255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255,,,255,255', ',,255,,255,,255,,255,,,,,,,,255,,,,,255,255,255,255,255,255,,,,255,255', '261,261,261,,261,,,255,261,261,,,,261,,261,261,261,261,261,261,261,', ',,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261,261,261,261,261', '261,261,261,261,261,261,261,,261,261,,261,261,261,,,,,,,,,,,,,,,,,,', ',261,,,261,,,261,261,,,261,,261,,261,,261,,,,,,,,261,,,,,261,261,261', '261,261,261,,,,261,261,264,264,264,,264,,,261,264,264,,,,264,,264,264', '264,264,264,264,264,,,,,,264,264,264,264,264,264,264,,,264,,,,,,,264', ',,264,264,264,264,264,264,264,264,264,264,264,264,,264,264,,264,264', '264,,,,,,,,,,,,,,,,,,,,264,,,264,,,264,264,,,264,,264,,264,,264,,,,', ',,,264,,,,,264,264,264,264,264,264,,,,264,264,264,603,603,603,,603,', '264,,603,603,,,,603,,603,603,603,603,603,603,603,,,,,,603,603,603,603', '603,603,603,,,603,,,,,,,603,,,603,603,603,603,603,603,603,603,603,603', '603,603,,603,603,,603,603,603,,,,,,,,,,,,,,,,,,,,603,,,603,,,603,603', ',,603,,603,,603,,603,,,,,,,,603,,,,,603,603,603,603,603,603,,,,603,603', '481,481,481,,481,,,603,481,481,,,,481,,481,481,481,481,481,481,481,', ',,,,481,481,481,481,481,481,481,,,481,,,,,,,481,,,481,481,481,481,481', '481,481,481,481,481,481,481,,481,481,,481,481,481,,,,,,,,,,,,,,,,,,', ',481,,,481,,,481,481,,,481,,,,481,,481,,,,,,,,481,,,,,481,481,481,481', '481,481,,,,481,481,483,483,483,,483,,,481,483,483,,,,483,,483,483,483', '483,483,483,483,,,,,,483,483,483,483,483,483,483,,,483,,,,,,,483,,,483', '483,483,483,483,483,483,483,,483,483,483,,483,483,,483,483,483,,,,,', ',,,,,,,,,,,,,,483,,,483,,,483,483,,,483,,,,,,483,,,,,,,,483,,,,,483', '483,483,483,483,483,,,,483,483,485,485,485,,485,,,483,485,485,,,,485', ',485,485,485,485,485,485,485,,,,,,485,485,485,485,485,485,485,,,485', ',,,,,,485,,,485,485,485,485,485,485,485,485,,485,485,485,,485,485,,485', '485,485,,,,,,,,,,,,,,,,,,,,485,,,485,,,485,485,,,485,,,,,,485,,,,,,', ',485,,,,,485,485,485,485,485,485,,,,485,485,487,487,487,487,487,,,485', '487,487,,,,487,,487,487,487,487,487,487,487,,,,,,487,487,487,487,487', '487,487,,,487,,,,,,487,487,,487,487,487,487,487,487,487,487,487,,487', '487,487,,487,487,,487,487,487,,,,,,,,,,,,,,,,,,,,487,,,487,,,487,487', ',,487,,487,,,,487,,,,,,,,487,,,,,487,487,487,487,487,487,,,,487,487', '701,701,701,,701,487,,487,701,701,,,,701,,701,701,701,701,701,701,701', ',,,,,701,701,701,701,701,701,701,,,701,,,,,,,701,,,701,701,701,701,701', '701,701,701,,701,701,701,,701,701,,701,701,701,,,,,,,,,,,,,,,,,,,,701', ',,701,,,701,701,,,701,,701,,,,701,,,,,,,,701,,,,,701,701,701,701,701', '701,,,,701,701,494,494,494,,494,,,701,494,494,,,,494,,494,494,494,494', '494,494,494,,,,,,494,494,494,494,494,494,494,,,494,,,,,,,494,,,494,494', '494,494,494,494,494,494,,494,494,494,,494,494,,,,494,,,,,,,,,,,,,,,', ',,,,494,,,494,,,494,494,,,494,,,,,,,,,,,,,,,,,,,494,494,494,494,494', '494,,,,494,494,496,496,496,,496,,,494,496,496,,,,496,,496,496,496,496', '496,496,496,,,,,,496,496,496,496,496,496,496,,,496,,,,,,,496,,,496,496', '496,496,496,496,496,496,496,496,496,496,,496,496,,496,496,496,,,,,,', ',,,,,,,,,,,,,496,,,496,,,496,496,,,496,,496,,496,,496,,,,,,,,496,,,', ',496,496,496,496,496,496,,,,496,496,503,503,503,,503,,,496,503,503,', ',,503,,503,503,503,503,503,503,503,,,,,,503,503,503,503,503,503,503', ',,503,,,,,,,503,,,503,503,503,503,503,503,503,503,,503,503,503,,503', '503,,,,503,,,,,,,,,,,,,,,,,,,,503,,,503,,,503,503,,,503,,,,,,,,,,,,', ',,,,,,503,503,503,503,503,503,,,,503,503,23,23,23,,23,,,503,23,23,,', ',23,,23,23,23,23,23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,', '23,23,23,23,23,23,23,23,,23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,', ',,23,,,23,,,23,23,,,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23', '23,947,947,947,,947,,,23,947,947,,,,947,,947,947,947,947,947,947,947', ',,,,,947,947,947,947,947,947,947,,,947,,,,,,,947,,,947,947,947,947,947', '947,947,947,947,947,947,947,,947,947,,947,947,947,,,,,,,,,,,,,,,,,,', ',947,,,947,,,947,947,,,947,,947,,947,,947,,,,,,,,947,,,,29,947,947,947', '947,947,947,29,29,29,947,947,29,29,29,,29,,,947,,,,,,29,29,29,,,,,,', ',,29,29,,29,29,29,29,29,,,,,,,,,,,,,,,,,,,,,,,,29,29,29,29,29,29,29', '29,29,29,29,29,29,29,,,29,29,29,,,29,,29,29,,,29,29,,29,,29,,29,,29', '29,29,29,29,29,29,,29,29,29,,,,,,,,,,,,30,29,29,,29,,29,30,30,30,,,30', '30,30,323,30,323,323,323,,323,,,,,30,30,,,,,,,,,30,30,,30,30,30,30,30', ',,,,,,,,,323,323,,,,,,,,323,323,323,323,,30,30,30,30,30,30,30,30,30', '30,30,30,30,30,,,30,30,30,,,30,,30,30,,,30,30,,30,,30,,30,,30,30,30', '30,30,30,30,,30,,30,,,,,,,,,,,,,30,30,,30,,30,31,31,31,,31,,,,31,31', ',,,31,,31,31,31,31,31,31,31,,,,,,31,31,31,31,31,31,31,,,31,,,,,,,31', ',,31,31,31,31,31,31,31,31,31,31,31,31,,31,31,,31,31,31,,,,,,,,,,,,,', ',,,,,,31,,,31,,,31,31,,,31,,31,,31,,31,,,,,,,,31,,,,,31,31,31,31,31', '31,,,,31,31,32,32,32,,32,,,31,32,32,,,,32,,32,32,32,32,32,32,32,,,,', ',32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32', '32,32,,32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,', '32,,32,,,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,33,33,33,,33,,,32,33', '33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,', '33,,,33,33,33,33,33,33,33,33,33,33,33,33,,33,33,,33,33,33,,,,,,,,,,', ',,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33,,,,,,,,33,,,,,33,33,33,33', '33,33,,,,33,33,36,36,36,,36,,,33,36,36,,,,36,,36,36,36,36,36,36,36,', ',,,,36,36,36,36,36,36,36,,,36,,,,,,,36,,,36,36,36,36,36,36,36,36,,36', '36,36,,36,36,,,,36,,,,,,,,,,,,,,,,,,,,36,,,36,,,36,36,,,36,,36,,,,,', ',,,,,,,,,,,36,36,36,36,36,36,,,,36,36,37,37,37,,37,,,36,37,37,,,,37', ',37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,,37,,,,,,,37,,,37,37', '37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,,,,,,,,,,,,,,37,,,37', ',,37,37,,,37,,,,,,,,,,,,,,,,,,,37,37,37,37,37,37,,,,37,37,478,478,478', '37,478,,,37,478,478,,,,478,,478,478,478,478,478,478,478,,,,,,478,478', '478,478,478,478,478,,,478,,,,,,,478,,,478,478,478,478,478,478,478,478', '478,478,478,478,,478,478,,478,478,478,,,,,,,,,,,,,,,,,,,,478,,,478,', ',478,478,,,478,,478,,478,,478,,,,,,,,478,,,,,478,478,478,478,478,478', ',,,478,478,604,604,604,,604,,,478,604,604,,,,604,,604,604,604,604,604', '604,604,,,,,,604,604,604,604,604,604,604,,,604,,,,,,,604,,,604,604,604', '604,604,604,604,604,604,604,604,604,,604,604,,604,604,604,,,,,,,,,,', ',,,,,,,,,604,,,604,,,604,604,,,604,,,,604,,604,,,,,,,,604,,,,,604,604', '604,604,604,604,,,,604,604,44,44,44,,44,,,604,44,44,,,,44,,44,44,44', '44,44,44,44,,,,,,44,44,44,44,44,44,44,,,44,,,,,,,44,,,44,44,44,44,44', '44,44,44,,44,44,44,,44,44,,44,44,44,,,,,,,,,,,,,,,,,,,,44,,,44,,,44', '44,,,44,,,,,,44,,,,,,,,44,,,,,44,44,44,44,44,44,,,,44,44,45,45,45,,45', ',,44,45,45,,,,45,,45,45,45,45,45,45,45,,,,,,45,45,45,45,45,45,45,,,45', ',,,,,,45,,,45,45,45,45,45,45,45,45,,45,45,45,,45,45,,45,45,45,,,,,,', ',,,,,,,,,,,,,45,,,45,,,45,45,,,45,,,,,,45,,,,,,,,45,,,,,45,45,45,45', '45,45,,,,45,45,46,46,46,,46,,,45,46,46,,,,46,,46,46,46,46,46,46,46,', ',,,,46,46,46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46', '46,46,,46,46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,', '46,,,,,,,,46,,,,,46,46,46,46,46,46,,,,46,46,605,605,605,,605,,,46,605', '605,,,,605,,605,605,605,605,605,605,605,,,,,,605,605,605,605,605,605', '605,,,605,,,,,,,605,,,605,605,605,605,605,605,605,605,,605,605,605,', '605,605,,605,605,605,,,,,,,,,,,,,,,,,,,,605,,,605,,,605,605,,,605,,', ',,,605,,,,,,,,605,,,,,605,605,605,605,605,605,,,,605,605,58,58,58,,58', ',,605,58,58,,,,58,,58,58,58,58,58,58,58,,,,,,58,58,58,58,58,58,58,,', '58,,,,,,,58,,,58,58,58,58,58,58,58,58,,58,58,58,,58,58,,58,58,58,,,', ',,,,,,,,,,,,,,,,58,,,58,,,58,58,,,58,,,,,,58,,,,,,,,58,,,,,58,58,58', '58,58,58,,,,58,58,59,59,59,,59,,,58,59,59,,,,59,,59,59,59,59,59,59,59', ',,,,,59,59,59,59,59,59,59,,,59,,,,,,,59,,,59,59,59,59,59,59,59,59,59', '59,59,59,,59,59,,59,59,59,,,,,,,,,,,,,,,,,,,,59,,,59,,,59,59,,,59,,59', ',,,59,,,,,,,,59,,,,,59,59,59,59,59,59,,,,59,59,63,63,63,,63,,,59,63', '63,,,,63,,63,63,63,63,63,63,63,,,,,,63,63,63,63,63,63,63,,,63,,,,,,', '63,,,63,63,63,63,63,63,63,63,,63,63,63,,63,63,,63,63,63,,,,,,,,,,,,', ',,,,,,,63,,,63,,,63,63,,,63,,,,,,63,,,,,,,,63,,,,,63,63,63,63,63,63', ',,,63,63,64,64,64,,64,,,63,64,64,,,,64,,64,64,64,64,64,64,64,,,,,,64', '64,64,64,64,64,64,,,64,,,,,,,64,,,64,64,64,64,64,64,64,64,,64,64,64', ',64,64,,64,64,64,,,,,,,,,,,,,,,,,,,,64,,,64,,,64,64,,,64,,,,,,64,,,', ',,,,64,,,,,64,64,64,64,64,64,,,,64,64,67,67,67,,67,,,64,67,67,,,,67', ',67,67,67,67,67,67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,624,,67,,,67', '67,67,67,67,67,67,67,,67,67,67,,67,67,,67,67,67,624,624,624,624,624', '624,624,624,624,624,624,,624,624,,,624,624,,67,,,67,,,67,67,,,67,,,624', ',624,67,624,624,624,624,624,624,624,67,624,,,,67,67,67,67,67,67,,,,67', '67,67,624,68,68,68,67,68,67,,,68,68,,,,68,,68,68,68,68,68,68,68,,,,', ',68,68,68,68,68,68,68,,,68,,,,,,,68,,,68,68,68,68,68,68,68,68,,68,68', '68,,68,68,,,,68,,,,,,,,,,,,,,,,,,,,68,,,68,,,68,68,,,68,,68,,,,,,,,', ',,,,,,,,68,68,68,68,68,68,,,,68,68,105,105,105,105,105,,,68,105,105', ',,,105,,105,105,105,105,105,105,105,,,,,,105,105,105,105,105,105,105', ',,105,,,,,,105,105,105,105,105,105,105,105,105,105,105,105,,105,105', '105,,105,105,,105,105,105,,,,,,,,,,,,,,,,,,,,105,,,105,,,105,105,,,105', ',105,,,,105,,,,,,,,105,,,,,105,105,105,105,105,105,,,,105,105,110,110', '110,,110,105,,105,110,110,,,,110,,110,110,110,110,110,110,110,,,,,,110', '110,110,110,110,110,110,,,110,,,,,,,110,,,110,110,110,110,110,110,110', '110,,110,110,110,,110,110,,110,110,110,,,,,,,,,,,,,,,,,,,,110,,,110', ',,110,110,,,110,,,,,,110,,,,,,,,110,,,,,110,110,110,110,110,110,,,,110', '110,111,111,111,,111,,,110,111,111,,,,111,,111,111,111,111,111,111,111', ',,,,,111,111,111,111,111,111,111,,,111,,,,,,,111,,,111,111,111,111,111', '111,111,111,,111,111,111,,111,111,,111,111,111,,,,,,,,,,,,,,,,,,,,111', ',,111,,,111,111,,,111,,,,,,111,,,,,,,,111,,,,,111,111,111,111,111,111', ',,,111,111,112,112,112,,112,,,111,112,112,,,,112,,112,112,112,112,112', '112,112,,,,,,112,112,112,112,112,112,112,,,112,,,,,,,112,,,112,112,112', '112,112,112,112,112,,112,112,112,,112,112,,112,112,112,,,,,,,,,,,,,', ',,,,,,112,,,112,,,112,112,,,112,,,,,,112,,,,,,,,112,,,,,112,112,112', '112,112,112,,,,112,112,113,113,113,,113,,,112,113,113,,,,113,,113,113', '113,113,113,113,113,,,,,,113,113,113,113,113,113,113,,,113,,,,,,,113', ',,113,113,113,113,113,113,113,113,,113,113,113,,113,113,,113,113,113', ',,,,,,,,,,,,,,,,,,,113,,,113,,,113,113,,,113,,,,,,113,,,,,,,,113,,,', ',113,113,113,113,113,113,,,,113,113,114,114,114,114,114,,,113,114,114', ',,,114,,114,114,114,114,114,114,114,,,,,,114,114,114,114,114,114,114', ',,114,,,,,,114,114,,114,114,114,114,114,114,114,114,114,,114,114,114', ',114,114,,114,114,114,,,,,,,,,,,,,,,,,,,,114,,,114,,,114,114,,,114,', '114,,,,114,,,,,,,,114,,,,,114,114,114,114,114,114,,,,114,114,576,576', '576,,576,,,114,576,576,,,,576,,576,576,576,576,576,576,576,,,,,,576', '576,576,576,576,576,576,,,576,,,,,,,576,,,576,576,576,576,576,576,576', '576,,576,576,576,,576,576,,576,576,576,,,,,,,,,,,,,,,,,,,,576,,,576', ',,576,576,,,576,,,,,,576,,,,,,,,576,,,,,576,576,576,576,576,576,,,,576', '576,200,200,200,,200,,,576,200,200,,,,200,,200,200,200,200,200,200,200', ',,,,,200,200,200,200,200,200,200,,,200,,,,,,,200,,,200,200,200,200,200', '200,200,200,,200,200,200,,200,200,,200,200,200,,,,,,,,,,,,,,,,,,,,200', ',,200,,,200,200,,,200,,200,,,,200,,,,,,,,200,,,,,200,200,200,200,200', '200,,,,200,200,201,201,201,,201,,,200,201,201,,,,201,,201,201,201,201', '201,201,201,,,,,,201,201,201,201,201,201,201,,,201,,,,,,,201,,,201,201', '201,201,201,201,201,201,,201,201,201,,201,201,,201,201,201,,,,,,,,,', ',,,,,,,,,,201,,,201,,,201,201,,,201,,,,,,201,,,,,,,,201,,,,,201,201', '201,201,201,201,,,,201,201,611,611,611,,611,,,201,611,611,,,,611,,611', '611,611,611,611,611,611,,,,,,611,611,611,611,611,611,611,,,611,,,,,', ',611,,,611,611,611,611,611,611,611,611,,611,611,611,,611,611,,611,611', '611,,,,,,,,,,,,,,,,,,,,611,,,611,,,611,611,,,611,,,,,,611,,,,,,,,611', ',,,,611,611,611,611,611,611,,,,611,611,612,612,612,,612,,,611,612,612', ',,,612,,612,612,612,612,612,612,612,,,,,,612,612,612,612,612,612,612', ',,612,,,,,,,612,,,612,612,612,612,612,612,612,612,,612,612,612,,612', '612,,612,612,612,,,,,,,,,,,,,,,,,,,,612,,,612,,,612,612,,,612,,,,,,612', ',,,,,,,612,,,,,612,612,612,612,612,612,,,,612,612,271,271,271,,271,', ',612,271,271,,,,271,,271,271,271,271,271,271,271,,,,,,271,271,271,271', '271,271,271,,,271,,,,,,,271,,,271,271,271,271,271,271,271,271,,271,271', '271,,271,271,,271,271,271,,,,,,,,,,,,,,,,,,,,271,,,271,,,271,271,,,271', ',,,,,271,,,,,,,,271,,,,,271,271,271,271,271,271,,,,271,271,616,616,616', ',616,,,271,616,616,,,,616,,616,616,616,616,616,616,616,,,,,,616,616', '616,616,616,616,616,,,616,,,,,,,616,,,616,616,616,616,616,616,616,616', ',616,616,616,,616,616,,616,616,616,,,,,,,,,,,,,,,,,,,,616,,,616,,,616', '616,,,616,,,,,,616,,,,,,,,616,,,,,616,616,616,616,616,616,,,,616,616', '273,273,273,,273,,,616,273,273,,,,273,,273,273,273,273,273,273,273,', ',,,,273,273,273,273,273,273,273,,,273,,,,,,,273,,,273,273,273,273,273', '273,273,273,,273,273,273,,273,273,,273,273,273,,,,,,,,,,,,,,,,,,,,273', ',,273,,,273,273,,,273,,,,,,273,,,,,,,,273,,,,,273,273,273,273,273,273', ',,,273,273,615,615,615,,615,,,273,615,615,,,,615,,615,615,615,615,615', '615,615,,,,,,615,615,615,615,615,615,615,,,615,,,,,,,615,,,615,615,615', '615,615,615,615,615,,615,615,615,,615,615,,615,615,615,,,,,,,,,,,,,', ',,,,,,615,,,615,,,615,615,,,615,,,,,,615,,,,,,,,615,,,,,615,615,615', '615,615,615,,,,615,615,858,858,858,,858,,,615,858,858,,,,858,,858,858', '858,858,858,858,858,,,,,,858,858,858,858,858,858,858,,,858,,,,,,,858', ',,858,858,858,858,858,858,858,858,,858,858,858,,858,858,,,,858,,,,,', ',,,,,,,,,,,,,,858,,,858,,,858,858,,,858,,,,,,,,,,,,,,,,,,,858,858,858', '858,858,858,,,,858,858,281,281,281,281,281,,,858,281,281,,,,281,,281', '281,281,281,281,281,281,,,,,,281,281,281,281,281,281,281,,,281,,,,,', '281,281,,281,281,281,281,281,281,281,281,281,,281,281,281,,281,281,', '281,281,281,,,,,,,,,,,,,,,,,,,,281,,,281,,,281,281,,,281,,281,,,,281', ',,,,,,,281,,,,,281,281,281,281,281,281,,,,281,281,848,848,848,,848,', ',281,848,848,,,,848,,848,848,848,848,848,848,848,,,,,,848,848,848,848', '848,848,848,,,848,,,,,,,848,,,848,848,848,848,848,848,848,848,,848,848', '848,,848,848,,,,848,,,,,,,,,,,,,,,,,,,,848,,,848,,,848,848,,,848,,,', ',,,,,,,,,,,,,,,848,848,848,848,848,848,,,,848,848,287,287,287,,287,', ',848,287,287,,,,287,,287,287,287,287,287,287,287,,,,,,287,287,287,287', '287,287,287,,,287,,,,,,422,287,,,287,287,287,287,287,287,287,287,,287', '287,287,,287,287,,,,287,,422,422,422,422,422,422,422,422,422,422,422', ',422,422,,,422,422,287,,,287,,,287,287,,,287,,,,422,,422,,422,422,422', '422,422,422,422,,422,,,287,287,287,287,287,287,,,,287,287,,,422,287', '422,,,287,8,8,8,8,8,,,,8,8,,,,8,,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,', '8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8,,8,8,,8,8,8,,,,,,,,,,,,,,,,,,', ',8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,,8,8,8,8,8,8,,,,8,8,600,600,600', ',600,,,8,600,600,,,,600,,600,600,600,600,600,600,600,,,,,,600,600,600', '600,600,600,600,,,600,,,,,,,600,,,600,600,600,600,600,600,600,600,,600', '600,600,,600,600,,600,600,600,,,,,,,,,,,,,,,,,,,,600,,,600,,,600,600', ',,600,,,,,,600,,,,,,,,600,,,,,600,600,600,600,600,600,,,,600,600,834', '834,834,,834,,,600,834,834,,,,834,,834,834,834,834,834,834,834,,,,,', '834,834,834,834,834,834,834,,,834,,,,,,,834,,,834,834,834,834,834,834', '834,834,,834,834,834,,834,834,,834,834,834,,,,,,,,,,,,,,,,,,,,834,,', '834,,,834,834,,,834,,,,,,834,,,,,,,,834,,,,,834,834,834,834,834,834', ',,,834,834,833,833,833,,833,,,834,833,833,,,,833,,833,833,833,833,833', '833,833,,,,,,833,833,833,833,833,833,833,,,833,,,,,,,833,,,833,833,833', '833,833,833,833,833,833,833,833,833,,833,833,,833,833,833,,,,,,,,,,', ',,,,,,,,,833,,,833,,,833,833,,,833,,,,833,,833,,,,,,,,833,,,,,833,833', '833,833,833,833,,,,833,833,815,815,815,,815,,,833,815,815,,,,815,,815', '815,815,815,815,815,815,,,,,,815,815,815,815,815,815,815,,,815,,,,,', ',815,,,815,815,815,815,815,815,815,815,,815,815,815,,815,815,,815,815', '815,,,,,,,,,,,,,,,,,,,,815,,,815,,,815,815,,,815,,,,,,815,,,,,,,,815', ',,,,815,815,815,815,815,815,,,,815,815,304,304,304,,304,,,815,304,304', ',,,304,,304,304,304,304,304,304,304,,,,,,304,304,304,304,304,304,304', ',,304,,,,,,,304,,,304,304,304,304,304,304,304,304,,304,304,304,,304', '304,,,,304,,,,,,,,,,,,,,,,,,,,304,,,304,,,304,304,,,304,,,,,,,,,,,,', ',,,,,,304,304,304,304,304,304,,,,304,304,313,313,313,,313,,,304,313', '313,,,,313,,313,313,313,313,313,313,313,,,,,,313,313,313,313,313,313', '313,,,313,,,,,,,313,,,313,313,313,313,313,313,313,313,,313,313,313,', '313,313,,313,313,313,,,,,,,,,,,,,,,,,,,,313,,,313,313,,313,313,,,313', ',,,,,313,,,,,,,,313,,,,,313,313,313,313,313,313,,,,313,313,320,320,320', ',320,,,313,320,320,,,,320,,320,320,320,320,320,320,320,,,,,,320,320', '320,320,320,320,320,,,320,,,,,,,320,,,320,320,320,320,320,320,320,320', '320,320,320,320,,320,320,,320,320,320,,,,,,,,,,,,,,,,,,,,320,,,320,', ',320,320,,,320,,,,,,320,,,,,,,,320,,,,,320,320,320,320,320,320,,,,320', '320,802,802,802,,802,,,320,802,802,,,,802,,802,802,802,802,802,802,802', ',,,,,802,802,802,802,802,802,802,,,802,,,,,,,802,,,802,802,802,802,802', '802,802,802,,802,802,802,,802,802,,802,802,802,,,,,,,,,,,,,,,,,,,,802', ',,802,,,802,802,,,802,,,,,,802,,,,,,,,802,,,,,802,802,802,802,802,802', ',,,802,802,327,327,327,,327,,,802,327,327,,,,327,,327,327,327,327,327', '327,327,,,,,,327,327,327,327,327,327,327,,,327,,,,,,,327,,,327,327,327', '327,327,327,327,327,,327,327,327,,327,327,,327,327,327,,,,,,,,,,,,,', ',,,,,,327,,,327,,,327,327,,,327,,,,,,327,,,,,,,,327,,,,,327,327,327', '327,327,327,,,,327,327,328,328,328,,328,,,327,328,328,,,,328,,328,328', '328,328,328,328,328,,,,,,328,328,328,328,328,328,328,,,328,,,,,,,328', ',,328,328,328,328,328,328,328,328,,328,328,328,,328,328,,328,328,328', ',,,,,,,,,,,,,,,,,,,328,,,328,,,328,328,,,328,,,,,,328,,,,,,,,328,,,', ',328,328,328,328,328,328,,,,328,328,340,340,340,,340,,,328,340,340,', ',,340,,340,340,340,340,340,340,340,,,,,,340,340,340,340,340,340,340', ',,340,,,,,,,340,,,340,340,340,340,340,340,340,340,,340,340,340,,340', '340,,,,340,,,,,,,,,,,,,,,,,,,,340,,,340,,,340,340,,,340,,,,,,,,,,,,', ',,,,,,340,340,340,340,340,340,,,,340,340,342,342,342,,342,,,340,342', '342,,,,342,,342,342,342,342,342,342,342,,,,,,342,342,342,342,342,342', '342,,,342,,,,,,,342,,,342,342,342,342,342,342,342,342,,342,342,342,', '342,342,,,,342,,,,,,,,,,,,,,,,,,,,342,,,342,,,342,342,,,342,,,,,,,,', ',,,,,,,,,,342,342,342,342,342,342,,,,342,342,754,754,754,,754,,,342', '754,754,,,,754,,754,754,754,754,754,754,754,,,,,,754,754,754,754,754', '754,754,,,754,,,,,,,754,,,754,754,754,754,754,754,754,754,,754,754,754', ',754,754,,754,754,754,,,,,,,,,,,,,,,,,,,,754,,,754,,,754,754,,,754,', ',,,,754,,,,,,,,754,,,,,754,754,754,754,754,754,,,,754,754,752,752,752', ',752,,,754,752,752,,,,752,,752,752,752,752,752,752,752,,,,,,752,752', '752,752,752,752,752,,,752,,,,,,,752,,,752,752,752,752,752,752,752,752', ',752,752,752,,752,752,,752,752,752,,,,,,,,,,,,,,,,,,,,752,,,752,,,752', '752,,,752,,,,,,752,,,,,,,,752,,,,,752,752,752,752,752,752,,,,752,752', '751,751,751,,751,,,752,751,751,,,,751,,751,751,751,751,751,751,751,', ',,,,751,751,751,751,751,751,751,,,751,,,,,,,751,,,751,751,751,751,751', '751,751,751,,751,751,751,,751,751,,751,751,751,,,,,,,,,,,,,,,,,,,,751', ',,751,,,751,751,,,751,,,,,,751,,,,,,,,751,,,,,751,751,751,751,751,751', ',,,751,751,750,750,750,,750,,,751,750,750,,,,750,,750,750,750,750,750', '750,750,,,,,,750,750,750,750,750,750,750,,,750,,,,,,,750,,,750,750,750', '750,750,750,750,750,,750,750,750,,750,750,,750,750,750,,,,,,,,,,,,,', ',,,,,,750,,,750,,,750,750,,,750,,,,,,750,,,,,,,,750,,,,,750,750,750', '750,750,750,,,,750,750,749,749,749,,749,,,750,749,749,,,,749,,749,749', '749,749,749,749,749,,,,,,749,749,749,749,749,749,749,,,749,,,,,,,749', ',,749,749,749,749,749,749,749,749,,749,749,749,,749,749,,749,749,749', ',,,,,,,,,,,,,,,,,,,749,,,749,,,749,749,,,749,,,,,,749,,,,,,,,749,,,', ',749,749,749,749,749,749,,,,749,749,735,735,735,,735,,,749,735,735,', ',,735,,735,735,735,735,735,735,735,,,,,,735,735,735,735,735,735,735', ',,735,,,,,,,735,,,735,735,735,735,735,735,735,735,,735,735,735,,735', '735,,735,735,735,,,,,,,,,,,,,,,,,,,,735,,,735,,,735,735,,,735,,,,,,735', ',,,,,,,735,,,,,735,735,735,735,735,735,,,,735,735,394,394,394,,394,', ',735,394,394,,,,394,,394,394,394,394,394,394,394,,,,,,394,394,394,394', '394,394,394,,,394,,,,,,,394,,,394,394,394,394,394,394,394,394,,394,394', '394,,394,394,,394,394,394,,,,,,,,,,,,,,,,,,,,394,,,394,,,394,394,,,394', ',,,,,394,,,,,,,,394,,,,,394,394,394,394,394,394,,,,394,394,733,733,733', ',733,,,394,733,733,,,,733,,733,733,733,733,733,733,733,,,,,,733,733', '733,733,733,733,733,,,733,,,,,,,733,,,733,733,733,733,733,733,733,733', ',733,733,733,,733,733,,733,733,733,,,,,,,,,,,,,,,,,,,,733,,,733,,,733', '733,,,733,,,,,,733,,,,,,,,733,,,,,733,733,733,733,733,733,,,,733,733', '558,558,558,,558,,,733,558,558,,,,558,,558,558,558,558,558,558,558,', ',,,,558,558,558,558,558,558,558,,,558,,,,,,,558,,,558,558,558,558,558', '558,558,558,558,558,558,558,,558,558,,558,558,558,,,,,,,,,,,,,,,,,,', ',558,,,558,,,558,558,,,558,,558,,558,,558,,,,,,,,558,,,,,558,558,558', '558,558,558,,,,558,558,643,643,643,,643,,,558,643,643,,,,643,,643,643', '643,643,643,643,643,,,,,,643,643,643,643,643,643,643,,,643,,,,,,,643', ',,643,643,643,643,643,643,643,643,,643,643,643,,643,643,,643,643,643', ',,,,,,,,,,,,,,,,,,,643,,,643,,,643,643,,,643,572,,572,572,572,643,572', ',,,,,,643,,,,405,643,643,643,643,643,643,405,405,405,643,643,405,405', '405,,405,,,643,,572,572,,,405,405,405,,,572,572,572,572,,,405,405,,405', '405,405,405,405,,,,,,,,,,,,,,,,,,,,,,,,405,405,405,405,405,405,405,405', '405,405,405,405,405,405,,,405,405,405,,,405,,405,405,,,405,405,,405', ',405,,405,,405,405,405,405,405,405,405,,405,405,405,,,,,,,,,,,,,405', '405,,405,,405,432,432,432,,432,,,,432,432,,,,432,,432,432,432,432,432', '432,432,,,,,,432,432,432,432,432,432,432,,,432,,,,,,,432,,,432,432,432', '432,432,432,432,432,432,432,432,432,,432,432,,432,432,432,,,,,,,,,,', ',,,,,,,,,432,,,432,,,432,432,,,432,,432,,432,,432,,,,,,,,432,,,,,432', '432,432,432,432,432,,,,432,432,434,434,434,,434,,,432,434,434,,,,434', ',434,434,434,434,434,434,434,,,,,,434,434,434,434,434,434,434,,,434', ',,,,,,434,,,434,434,434,434,434,434,434,434,,434,434,434,,434,434,,434', '434,434,,,,,,,,,,,,,,,,,,,,434,,,434,,,434,434,,,434,,,,,,434,,,,,,', ',434,,,,,434,434,434,434,434,434,,,,434,434,435,435,435,,435,,,434,435', '435,,,,435,,435,435,435,435,435,435,435,,,,,,435,435,435,435,435,435', '435,,,435,,,,,,,435,,,435,435,435,435,435,435,435,435,,435,435,435,', '435,435,,435,435,435,,,,,,,,,,,,,,,,,,,,435,,,435,,,435,435,,,435,,', ',,,435,,,,,,,,435,,,,,435,435,435,435,435,435,,,,435,435,436,436,436', ',436,,,435,436,436,,,,436,,436,436,436,436,436,436,436,,,,,,436,436', '436,436,436,436,436,,,436,,,,,,,436,,,436,436,436,436,436,436,436,436', ',436,436,436,,436,436,,436,436,436,,,,,,,,,,,,,,,,,,,,436,,,436,,,436', '436,,,436,,,,,,436,,,,,,,,436,,,,,436,436,436,436,436,436,,,,436,436', '649,649,649,,649,,,436,649,649,,,,649,,649,649,649,649,649,649,649,', ',,,,649,649,649,649,649,649,649,,,649,,,,,,,649,,,649,649,649,649,649', '649,649,649,,649,649,649,,649,649,,,,649,,,,,,,,,,,,,,,,,,,,649,,,649', ',,649,649,,,649,,,,,,,,,,,,,,,,,,,649,649,649,649,649,649,,,,649,649', '713,713,713,,713,,,649,713,713,,,,713,,713,713,713,713,713,713,713,', ',,,,713,713,713,713,713,713,713,,,713,,,,,,,713,,,713,713,713,713,713', '713,713,713,713,713,713,713,,713,713,,713,713,713,,,,,,,,,,,,,,,,,,', ',713,,,713,,,713,713,,,713,,713,,713,,713,,,,,,,,713,,,,,713,713,713', '713,713,713,,,,713,713,660,660,660,,660,,,713,660,660,,,,660,,660,660', '660,660,660,660,660,,,,,,660,660,660,660,660,660,660,,,660,,,,,,,660', ',,660,660,660,660,660,660,660,660,,660,660,660,,660,660,,,,660,,,,,', ',,,,,,,,,,,,,,660,,,660,,,660,660,,,660,,,,,,,,,,,,,,,,,,,660,660,660', '660,660,660,,,,660,660,666,666,666,,666,,,660,666,666,,,,666,,666,666', '666,666,666,666,666,,,,,,666,666,666,666,666,666,666,,,666,,,,,,,666', ',,666,666,666,666,666,666,666,666,,666,666,666,,666,666,,666,666,666', ',,,,,,,,,,,,,,,,,,,666,,,666,,,666,666,,,666,,666,,,,666,,,,,,,,666', ',,,,666,666,666,666,666,666,,,,666,666,520,520,520,,520,,,666,520,520', ',,,520,,520,520,520,520,520,520,520,,,,,,520,520,520,520,520,520,520', ',,520,,,,,,,520,,,520,520,520,520,520,520,520,520,520,520,520,520,,520', '520,,520,520,520,,,,,,,,,,,,,,,,,,,,520,,,520,,,520,520,,,520,,,,,,520', ',,,,,,,520,,,,,520,520,520,520,520,520,,,,520,520,517,517,517,,517,', ',520,517,517,,,,517,,517,517,517,517,517,517,517,,,,,,517,517,517,517', '517,517,517,,,517,,,,,,,517,,,517,517,517,517,517,517,517,517,517,517', '517,517,,517,517,,517,517,517,,,,,,,,,,,,,,,,,,,,517,,,517,,,517,517', ',,517,,517,,,,517,,,,,,,,517,,,,,517,517,517,517,517,517,,,,517,517', '512,512,512,,512,,,517,512,512,,,,512,,512,512,512,512,512,512,512,', ',,,,512,512,512,512,512,512,512,,,512,,,,,,,512,,,512,512,512,512,512', '512,512,512,,512,512,512,,512,512,,512,512,512,,,,,,,,,,,,,,,,,,,,512', ',,512,,,512,512,,,512,,,,,,512,,,,,,,,512,,,,,512,512,512,512,512,512', ',,,512,512,508,508,508,,508,,,512,508,508,,,,508,,508,508,508,508,508', '508,508,,,,,,508,508,508,508,508,508,508,,,508,,,,,,,508,,,508,508,508', '508,508,508,508,508,,508,508,508,,508,508,,508,508,508,,,,,,,,,,,,,', ',,,,,,508,,,508,,,508,508,,,508,,,,,,508,,,,,,,,508,,,,,508,508,508', '508,508,508,,,,508,508,507,507,507,,507,,,508,507,507,,,,507,,507,507', '507,507,507,507,507,,,,,,507,507,507,507,507,507,507,,,507,,,,,,,507', ',,507,507,507,507,507,507,507,507,,507,507,507,,507,507,,507,507,507', ',,,,,,,,,,,,,,,,,,,507,,,507,,,507,507,,,507,,,,,,507,,,,,,,,507,,,', '464,507,507,507,507,507,507,464,464,464,507,507,464,464,464,,464,,,507', ',,,,,,464,,,,,,,,,,464,464,,464,464,464,464,464,,,,,,,,,,,,,467,,,,', ',,467,467,467,,,467,467,467,,467,,,,,,464,,,,467,,,464,,,,,464,464,467', '467,,467,467,467,467,467,,,,,,,,,,,,,,464,,,,,,,,,,,,,464,,,,,464,,', '467,,,,,,,467,,,,,467,467,,,,,,,,,,,,,,,,,,,,,,467,,,,,,506,506,506', ',506,,,467,506,506,,,467,506,,506,506,506,506,506,506,506,,,,,,506,506', '506,506,506,506,506,,,506,,,,,,,506,,,506,506,506,506,506,506,506,506', ',506,506,506,,506,506,,506,506,506,,,,,,,,,,,,,,,,,,,,506,,,506,,,506', '506,,,506,,,,,,506,,,,,,,,506,,,,,506,506,506,506,506,506,,,,506,506', '682,682,682,,682,,,506,682,682,,,,682,,682,682,682,682,682,682,682,', ',,,,682,682,682,682,682,682,682,,,682,,,,,,,682,,,682,682,682,682,682', '682,682,682,,682,682,682,,682,682,,682,682,682,,,,,,,,,,,,,,,,,,,,682', ',,682,,,682,682,,,682,,,,,,682,,,,,,,,682,,,,,682,682,682,682,682,682', ',,,682,682,707,707,707,,707,,,682,707,707,,,,707,,707,707,707,707,707', '707,707,,,,,,707,707,707,707,707,707,707,,,707,,,,,397,,707,,,707,707', '707,707,707,707,707,707,,707,707,707,,707,707,,707,707,707,397,397,397', '397,397,397,397,397,397,397,397,,397,397,,,397,397,,707,,,707,,,707', '707,,,707,,,397,,397,707,397,397,397,397,397,397,397,707,397,,,,707', '707,707,707,707,707,,,,707,707,,397,,,,,,707,12,12,12,12,12,12,12,12', '12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12', '12,12,12,12,,,,,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12', '12,12,12,12,12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12', '12,12,12,12,12,12,12,,,12,12,,,,,,,,,,12,596,596,596,596,596,596,596', '596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596', ',,,596,596,596,596,596,596,596,596,596,596,,,,,,596,596,596,596,596', '596,596,596,596,,,596,,,,,,,,,596,596,,596,596,596,596,596,596,596,', ',596,596,,,,596,596,596,596,,,,,,,,,,,,,,596,596,,596,596,596,596,596', '596,596,596,596,596,596,,,596,596,,,,,,,,,,596,11,11,11,11,11,11,11', '11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,,,,11,11,11,11,11', '11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11,11,,11,,,,,,,,,11,11', ',11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11,,11', '11,11,11,11,11,11,11,11,11,11,,,11,11,,,,,,,,,,11,385,385,385,385,385', '385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385', '385,385,,,,385,385,385,385,385,385,385,385,385,385,,,,,,385,385,385', '385,385,385,385,385,385,,,385,,,,,,,,,385,385,,385,385,385,385,385,385', '385,,,385,385,,,,385,385,385,385,,,,,,,,,,,,,,385,385,,385,385,385,385', '385,385,385,385,385,385,385,,,385,385,,,,,,,,,,385,723,723,723,723,723', '723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723', '723,723,,,,723,723,723,723,723,723,723,723,723,723,,,,,,723,723,723', '723,723,723,723,723,723,,,723,,,,,,,,,723,723,,723,723,723,723,723,723', '723,,,723,723,,,,723,723,723,723,,,,,,,,,,,,,,723,723,,723,723,723,723', '723,723,723,723,723,723,723,,,723,71,71,71,71,71,71,71,71,71,71,71,71', '71,71,71,71,71,71,71,71,71,71,71,71,,,,71,71,71,71,71,71,71,71,71,71', ',,,,,71,71,71,71,71,71,71,71,71,71,71,71,,71,,,,,,,71,71,,71,71,71,71', '71,71,71,,,71,71,,,,71,71,71,71,,,,,,71,,,,,,,,71,71,,71,71,71,71,71', '71,71,71,71,71,71,,,71,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85', '85,85,85,85,85,85,85,85,85,,,,85,85,85,85,85,85,85,85,85,85,,,,,,85', '85,85,85,85,85,85,85,85,85,85,85,,85,,,,,,,85,85,,85,85,85,85,85,85', '85,,,85,85,,,,85,85,85,85,,,,,,,,,,,,,,85,85,,85,85,85,85,85,85,85,85', '85,85,85,949,949,85,,949,,,,,,,,,949,949,,949,949,949,949,949,949,949', ',,949,949,,,,949,949,949,949,,,,,,949,,,,,,,,949,949,,949,949,949,949', '949,949,949,949,949,949,949,253,253,949,,253,,,,,,,,,253,253,,253,253', '253,253,253,253,253,,,253,253,,,,253,253,253,253,,,,,,,,,,,,,,253,253', ',253,253,253,253,253,253,253,253,253,253,253,943,943,253,,943,,,,,,', ',,943,943,,943,943,943,943,943,943,943,,,943,943,,,,943,943,943,943', ',,,,,943,,,,,,,,943,943,,943,943,943,943,943,943,943,943,943,943,943', '252,252,943,,252,,,,,,,,,252,252,,252,252,252,252,252,252,252,,,252', '252,,,,252,252,252,252,,,,,,,,,,,,,,252,252,,252,252,252,252,252,252', '252,252,252,252,252,431,431,252,,431,,,,,,,,,431,431,,431,431,431,431', '431,431,431,,,431,431,,,,431,431,431,431,,,,,,431,,,,,,,,431,431,,431', '431,431,431,431,431,431,431,431,431,431,510,510,431,,510,,,,,,,,,510', '510,,510,510,510,510,510,510,510,,,510,510,,,,510,510,510,510,,,,,,510', ',,,,,,,510,510,,510,510,510,510,510,510,510,510,510,510,510,204,204', '510,,204,,,,,,,,,204,204,,204,204,204,204,204,204,204,,,204,204,,,,204', '204,204,204,,,,,,204,,,,,,,,204,204,,204,204,204,204,204,204,204,204', '204,204,204,203,203,204,,203,,,,,,,,,203,203,,203,203,203,203,203,203', '203,,,203,203,,,,203,203,203,203,,,,,,203,,,,,,,,203,203,,203,203,203', '203,203,203,203,203,203,203,203,509,509,203,,509,,,,,,,,,509,509,,509', '509,509,509,509,509,509,,,509,509,,,,509,509,509,509,,,,,,509,,,,,,', ',509,509,,509,509,509,509,509,509,509,509,509,509,509,711,711,509,,711', ',,,,,,,,711,711,,711,711,711,711,711,711,711,,,711,711,,,,711,711,711', '711,,,,,,711,,,,,,,,711,711,,711,711,711,711,711,711,711,711,711,711', '711,497,497,711,,497,,,,,,,,,497,497,,497,497,497,497,497,497,497,,', '497,497,,,,497,497,497,497,,,,,,497,,,,,,,,497,497,,497,497,497,497', '497,497,497,497,497,497,497,712,712,497,,712,,,,,,,,,712,712,,712,712', '712,712,712,712,712,,,712,712,,,,712,712,712,712,,,,,,712,,,,,,,,712', '712,,712,712,712,712,712,712,712,712,712,712,712,560,560,712,,560,,', ',,,,,,560,560,,560,560,560,560,560,560,560,,,560,560,,,,560,560,560', '560,,,,,,560,,,,,,,,560,560,,560,560,560,560,560,560,560,560,560,560', '560,948,948,560,,948,,,,,,,,,948,948,,948,948,948,948,948,948,948,,', '948,948,,,,948,948,948,948,,,,,,948,,,,,,,,948,948,,948,948,948,948', '948,948,948,948,948,948,948,498,498,948,,498,,,,,,,,,498,498,,498,498', '498,498,498,498,498,,,498,498,,,,498,498,498,498,,,,,,498,,,,,,,,498', '498,,498,498,498,498,498,498,498,498,498,498,498,430,430,498,,430,,', ',,,,,,430,430,,430,430,430,430,430,430,430,,,430,430,,,,430,430,430', '430,,,,,,430,,,,,,,,430,430,,430,430,430,430,430,430,430,430,430,430', '430,559,559,430,,559,,,,,,,,,559,559,,559,559,559,559,559,559,559,,', '559,559,,,,559,559,559,559,,,,,,559,,,,,,,,559,559,,559,559,559,559', '559,559,559,559,559,559,559,,,559,734,734,734,734,734,734,734,734,734', '734,734,,734,734,,,734,734,,,,,,,,,,,,,,,734,,734,,734,734,734,734,734', '734,734,,734,744,744,744,744,744,744,744,744,744,744,744,,744,744,,734', '744,744,,,,,,,,,,,,,,,744,,744,,744,744,744,744,744,744,744,,744,835', '835,835,835,835,835,835,835,835,835,835,,835,835,,744,835,835,,,,,,', ',,,,,,,,835,,835,,835,835,835,835,835,835,835,,835,24,24,24,24,24,24', '24,24,24,24,24,,24,24,,835,24,24,,,,,,,,,,,,,,,24,,24,,24,24,24,24,24', '24,24,,24,746,746,746,746,746,746,746,746,746,746,746,,746,746,,24,746', '746,,,,,,,,,,,,,,,746,,746,,746,746,746,746,746,746,746,,746,832,832', '832,832,832,832,832,832,832,832,832,,832,832,,746,832,832,,,,,,,,,,', ',,,,832,,832,,832,832,832,832,832,832,832,,832,748,748,748,748,748,748', '748,748,748,748,748,,748,748,,832,748,748,,,,,,,,,,,,,,,748,,748,,748', '748,748,748,748,748,748,,748,511,511,511,511,511,511,511,511,511,511', '511,,511,511,,748,511,511,,,,,,,,,,,,,,,511,,511,,511,511,511,511,511', '511,511,,511,462,462,462,462,462,462,462,462,462,462,462,,462,462,,511', '462,462,,,,,,,,,,,,,,,462,,462,,462,462,462,462,462,462,462,,462,417', '417,417,417,417,417,417,417,417,417,417,,417,417,462,462,417,417,,,', ',,,,,,,,,,,417,,417,,417,417,417,417,417,417,417,,417,266,266,266,266', '266,266,266,266,266,266,266,,266,266,,417,266,266,,,,,,,,,,,,,,,266', ',266,,266,266,266,266,266,266,266,,266,741,741,741,741,741,741,741,741', '741,741,741,,741,741,,266,741,741,,,,,,,,,,,,,,,741,,741,,741,741,741', '741,741,741,741,,741,739,739,739,739,739,739,739,739,739,739,739,,739', '739,,741,739,739,,,,,,,,,,,,,,,739,,739,,739,739,739,739,739,739,739', ',739,661,661,661,661,661,661,661,661,661,661,661,,661,661,,739,661,661', ',,,,,,,,,,,,,,661,,661,,661,661,661,661,661,661,661,,661,,,,,,,,,,,', ',,,,661' ] racc_action_check = arr = ::Array.new(23604, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_action_pointer = [ nil, 856, 2914, 1082, nil, 561, nil, nil, 15957, 1455, nil, 21332, 21084, 624, nil, 1249, 1003, 514, 342, 951, 399, nil, 67, 10990, 23026, 1054, nil, 525, 283, 11228, 11353, 11483, 11607, 11731, nil, 2539, 11855, 11979, nil, 946, 441, 216, 1013, 798, 12351, 12475, 12599, 939, 600, nil, nil, nil, nil, nil, nil, nil, 1030, nil, 12847, 12971, nil, 56, nil, 13095, 13219, nil, nil, 13343, 13469, 971, nil, 21693, nil, nil, nil, nil, nil, 35, nil, nil, nil, nil, nil, 923, 920, 21806, nil, nil, nil, 640, nil, nil, 255, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 13593, nil, nil, nil, nil, 13717, 13841, 13965, 14089, 14213, 928, nil, 361, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 869, nil, 1664, 14461, 14585, 4788, 22294, 22233, 4912, 5036, 5160, 5284, 5408, 5532, nil, nil, 644, 143, 206, 906, 230, 820, 864, nil, 6153, 4164, 842, 6277, 6401, 6525, 6649, 6773, 6897, 7021, 7145, 7269, 7393, 7517, 7641, 7765, 7889, 8013, 8137, 8261, 8385, 8509, 8633, 8757, 8881, 9005, 9129, 9253, 9377, nil, nil, 22050, 21928, 833, 9501, nil, 839, nil, nil, nil, 9625, nil, nil, 9749, nil, 23341, nil, 795, 794, nil, 14957, 822, 15205, nil, 780, nil, nil, 520, nil, 1414, 15577, 770, 3164, 765, 789, 737, 15825, 4289, 679, 687, 730, 807, 481, nil, 761, 710, 111, nil, nil, nil, 740, 760, 647, 16577, nil, 352, 683, 665, 817, nil, 663, nil, 16701, 2164, 767, nil, 373, 506, 631, 16825, nil, nil, 11317, 756, 120, 51, 17073, 17197, 560, 684, 384, 129, 90, 860, 448, 123, 451, nil, nil, 17321, nil, 17445, 330, 259, 565, 140, 76, 363, 487, 470, 455, nil, 611, nil, nil, nil, nil, nil, 441, nil, 435, nil, 420, nil, 254, 385, nil, 248, 40, nil, 309, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 4664, 21456, nil, nil, nil, nil, 244, nil, 187, nil, 18313, 176, nil, 20952, 148, nil, nil, 115, 63, 555, 467, 18799, nil, nil, nil, 385, 130, 88, nil, nil, 900, 770, nil, 23296, nil, 41, nil, nil, 15826, nil, nil, nil, nil, 154, nil, -9, 22782, 22111, 18929, 268, 19053, 19177, 19301, 3664, 3539, 339, 790, -43, 1323, 1322, 1321, 3789, 3914, 4039, 3414, 3289, 3164, 3039, 2039, 2789, 2664, 2539, 2414, 2289, 853, 956, 2164, 2914, 23251, 201, 20531, nil, nil, 20587, nil, nil, nil, nil, 212, 210, 1257, 1254, nil, nil, 12103, nil, nil, 9998, nil, 10122, nil, 10246, nil, 10370, 720, 1253, 1245, nil, nil, 1242, 10618, 1223, 10742, 22477, 22721, 908, 1241, nil, nil, 10866, 1196, nil, 20704, 20417, 20293, 22355, 22172, 23206, 20169, 1310, 1307, 1187, nil, 20045, nil, nil, 19921, nil, 1189, nil, 403, 1213, 62, 1966, nil, 1167, 1148, 1147, nil, nil, nil, nil, nil, nil, 1124, nil, 576, nil, nil, nil, nil, 1196, nil, nil, 1195, 0, 1219, nil, 1414, 114, 122, 1211, 1211, nil, 18561, 22843, 22599, 99, nil, 449, 419, 165, nil, 947, nil, 55, 5781, nil, 18731, nil, nil, nil, 14337, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 288, nil, nil, nil, 1070, nil, 1076, nil, 21208, nil, 1059, 5905, 16081, 438, 1065, 9874, 12227, 12723, 5657, 1043, nil, nil, nil, 14709, 14833, 1035, nil, 15329, 15081, nil, nil, 97, 54, 0, 510, 1064, 13343, 1078, nil, nil, 571, nil, nil, nil, nil, nil, nil, 261, nil, nil, nil, nil, 1081, nil, 1136, 18685, nil, nil, nil, 1110, 185, 19425, 1104, nil, 1118, 262, 276, 1161, 388, 1164, 1182, 1144, 19673, 23476, 1211, 1218, 253, 1284, 19797, nil, nil, 442, nil, nil, nil, 2664, 2289, 1174, 701, nil, 1841, nil, nil, 1436, 20828, nil, 774, nil, 1206, 321, nil, 1232, nil, nil, 649, nil, 1345, nil, nil, nil, nil, 1360, nil, 10494, 1247, 125, 118, 159, 121, 20952, nil, 1069, nil, 22416, 22538, 19549, nil, nil, nil, 49, 508, 1164, 1789, 1716, 320, 21580, 158, 1119, 2789, nil, nil, nil, nil, nil, 131, 18437, 22891, 18189, nil, 189, nil, 23431, nil, 23386, nil, nil, 22936, nil, 23071, nil, 23161, 18065, 17941, 17817, 17693, 77, 17569, 267, 275, 288, nil, 314, 306, nil, 1150, 312, nil, 1914, nil, 2414, 3664, nil, nil, 356, 355, nil, nil, 497, nil, 4539, 392, 472, nil, nil, nil, 478, 591, 480, 483, 491, nil, nil, 505, 544, nil, 546, nil, 562, 644, 574, 1034, nil, 697, nil, 16949, 712, 1289, 2039, nil, 144, 97, 96, 322, 1267, nil, 614, 3539, 16453, nil, 404, 771, 785, 679, nil, nil, nil, nil, nil, nil, nil, nil, 706, 697, nil, 23116, 16329, 16205, 22981, 1591, nil, 1466, nil, nil, 1311, nil, 759, 741, nil, nil, nil, 15701, 876, 3039, 779, 894, nil, 3414, nil, nil, 34, 15453, nil, nil, nil, nil, 1341, nil, nil, 1214, nil, 1186, nil, 1091, nil, nil, nil, 258, 1181, 802, nil, 173, nil, 926, 940, 6029, 3789, nil, nil, 951, 443, nil, nil, nil, nil, 994, nil, 837, 852, 858, 860, nil, 861, nil, 1275, 1077, 937, nil, 883, nil, nil, nil, 1539, 1167, 1170, 1278, 964, 1282, nil, 892, 893, 895, 904, 906, 893, 907, 1023, 4414, nil, nil, nil, 136, 4039, nil, nil, 3914, 3289, 864, nil, nil, 833, nil, 734, nil, nil, nil, 21989, nil, nil, 1072, 11114, 22660, 21867, 1292, nil, 604, nil, nil, nil, 763, 967, 819, nil, nil, nil, 1102, 1107, 1108, 990, 991, 993, 997, 1038, 1040, nil, 1137, 175, 146, 176, 1392, 881, 886, nil, nil, nil, nil, nil, 963, nil, nil, nil, 48, nil, 871, nil ] racc_action_default = [ -1, -580, -579, -580, -2, -566, -4, -5, -580, -8, -9, -580, -580, -580, -29, -580, -580, -580, -277, -580, -41, -44, -568, -580, -49, -51, -52, -53, -258, -258, -258, -289, -328, -329, -70, -579, -74, -82, -84, -580, -493, -494, -580, -580, -580, -580, -580, -568, -239, -270, -271, -272, -273, -274, -275, -276, -556, -279, -580, -579, -287, -297, -394, -580, -580, -302, -305, -566, -580, -313, -320, -580, -330, -331, -435, -436, -437, -438, -439, -579, -442, -579, -579, -579, -579, -579, -471, -477, -478, -554, -482, -483, -555, -485, -486, -487, -488, -489, -490, -491, -492, -497, -498, 992, -3, -567, -575, -576, -577, -7, -580, -580, -580, -580, -580, -580, -17, -580, -113, -114, -115, -116, -117, -118, -119, -120, -121, -125, -126, -127, -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, -189, -190, -191, -192, -193, -194, -22, -122, -579, -580, -580, -579, -580, -580, -580, -580, -580, -580, -580, -568, -569, -48, -580, -493, -494, -580, -277, -580, -580, -231, -580, -579, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, -400, -403, -580, -580, -59, -580, -296, -580, -416, -419, -65, -579, -413, -66, -568, -67, -240, -253, -579, -579, -257, -580, -263, -580, -550, -568, -68, -69, -566, -13, -14, -580, -72, -579, -568, -580, -75, -78, -579, -90, -91, -580, -580, -98, -289, -292, -568, -406, -328, -329, -332, -414, -580, -80, -580, -86, -285, -479, -480, -580, -216, -217, -232, -580, -579, -281, -241, -572, -572, -580, -579, -298, -299, -519, -50, -580, -580, -580, -580, -566, -580, -567, -493, -494, -580, -580, -277, -580, -353, -354, -580, -316, -580, -113, -114, -154, -155, -156, -172, -177, -184, -187, -323, -580, -493, -494, -545, -546, -440, -580, -455, -580, -457, -580, -459, -580, -580, -447, -580, -580, -453, -580, -470, -472, -473, -474, -475, -6, -578, -23, -24, -25, -26, -27, -579, -580, -19, -20, -21, -123, -580, -30, -39, -40, -580, -580, -31, -197, -568, -248, -249, -579, -579, -557, -558, -258, -411, -559, -560, -558, -557, -258, -410, -412, -559, -560, -37, -205, -38, -580, -42, -43, -195, -263, -45, -46, -47, -568, -295, -580, -580, -580, -579, -285, -580, -580, -580, -206, -207, -208, -209, -210, -211, -212, -213, -218, -219, -220, -221, -222, -223, -224, -225, -226, -227, -228, -229, -230, -233, -234, -235, -236, -568, -579, -258, -557, -558, -258, -56, -60, -259, -407, -579, -579, -568, -568, -291, -254, -580, -262, -255, -580, -260, -580, -264, -580, -12, -567, -16, -568, -71, -283, -87, -76, -580, -568, -579, -580, -580, -97, -580, -479, -480, -580, -83, -88, -580, -580, -580, -580, -580, -237, -580, -427, -580, -568, -242, -574, -573, -244, -574, -286, -580, -548, -572, -580, -580, -519, -397, -544, -544, -544, -518, -520, -521, -522, -523, -524, -525, -526, -580, -528, -534, -536, -537, -539, -540, -541, -580, -579, -344, -345, -579, -580, -580, -580, -580, -422, -579, -580, -580, -285, -310, -108, -109, -580, -111, -580, -277, -580, -580, -321, -519, -325, -564, -565, -580, -441, -456, -461, -462, -464, -443, -458, -444, -460, -445, -446, -580, -449, -451, -452, -580, -476, -580, -18, -580, -28, -269, -580, -580, -415, -580, -250, -252, -580, -580, -61, -246, -247, -408, -580, -580, -63, -409, -580, -580, -294, -570, -557, -558, -557, -558, -568, -195, -580, -383, -384, -579, -386, -401, -54, -404, -55, -405, -579, -417, -420, -245, -290, -579, -261, -265, -580, -551, -552, -553, -15, -73, -580, -79, -85, -568, -557, -558, -579, -94, -96, -580, -81, -580, -204, -214, -215, -568, -579, -579, -280, -282, -572, -288, -549, -395, -579, -579, -579, -580, -511, -580, -514, -516, -580, -580, -355, -580, -357, -359, -366, -525, -568, -538, -542, -579, -346, -579, -303, -347, -348, -306, -580, -309, -580, -568, -557, -558, -561, -284, -580, -108, -109, -110, -580, -580, -579, -314, -499, -500, -580, -317, -579, -579, -519, -580, -580, -568, -580, -579, -448, -450, -454, -10, -124, -267, -580, -198, -580, -571, -579, -33, -200, -34, -201, -62, -35, -203, -36, -202, -64, -196, -580, -580, -580, -580, -415, -580, -544, -544, -544, -382, -580, -579, -388, -580, -525, -532, -579, -57, -579, -579, -256, -266, -77, -92, -89, -293, -579, -351, -579, -428, -579, -429, -430, -243, -580, -580, -568, -544, -544, -529, -543, -544, -544, -535, -544, -530, -568, -580, -364, -580, -527, -580, -349, -580, -580, -579, -579, -308, -580, -415, -580, -108, -109, -112, -568, -579, -580, -502, -580, -580, -580, -568, -504, -326, -547, -463, -466, -467, -468, -469, -580, -268, -32, -199, -251, -580, -238, -373, -375, -580, -378, -380, -580, -385, -580, -389, -390, -392, -393, -580, -580, -579, -580, -580, -11, -579, -434, -352, -580, -580, -432, -398, -399, -396, -580, -507, -509, -580, -512, -580, -515, -580, -517, -356, -358, -362, -580, -367, -300, -580, -301, -580, -580, -580, -579, -311, -415, -580, -580, -318, -322, -324, -503, -519, -465, -544, -544, -544, -544, -533, -544, -387, -580, -531, -580, -402, -580, -418, -421, -433, -579, -99, -100, -580, -580, -107, -431, -544, -544, -544, -544, -360, -580, -365, -580, -579, -304, -307, -265, -579, -579, -315, -501, -579, -579, -580, -370, -372, -580, -376, -580, -379, -381, -391, -580, -285, -58, -427, -579, -580, -580, -106, -505, -580, -508, -510, -513, -580, -363, -579, -423, -424, -425, -580, -580, -580, -544, -544, -544, -544, -284, -561, -426, -568, -557, -558, -561, -105, -544, -361, -350, -312, -319, -327, -368, -580, -371, -374, -377, -415, -506, -544, -369 ] clist = [ '6,209,212,514,549,552,665,480,352,421,286,4,121,121,126,126,528,398', '504,267,267,267,373,532,124,124,313,268,268,268,556,116,198,28,393,641', '469,800,641,28,418,405,411,284,9,601,720,108,104,644,9,105,325,326,28', '317,329,316,847,695,698,792,28,28,28,428,28,845,254,260,263,756,121', '516,519,775,474,360,282,362,364,367,370,362,303,689,121,898,644,28,464', '467,876,358,28,28,788,262,28,379,380,381,382,569,803,571,300,300,873', '108,330,710,759,2,578,265,276,277,585,476,115,589,269,269,269,630,109', '361,853,632,197,371,634,339,636,637,28,385,300,490,480,28,28,28,28,28', '635,9,850,596,318,319,356,522,321,322,383,337,315,785,641,641,714,324', '324,353,573,324,314,922,515,16,644,320,327,804,328,16,805,391,396,707', '929,898,416,420,340,814,570,817,267,932,342,719,572,723,395,847,892', '760,399,844,395,526,16,415,942,672,650,323,324,324,324,324,757,957,251', '659,463,765,675,472,767,377,473,768,959,532,701,795,28,28,28,28,779', '873,28,28,28,28,28,28,857,267,843,1,792,623,359,267,978,268,267,28,485', '699,788,812,363,399,268,366,787,588,790,369,479,479,405,411,753,406', '532,824,16,500,725,726,505,894,671,372,617,16,815,786,28,576,,,788,489', '28,,,28,495,766,,772,,,,979,,,,424,425,426,427,652,28,,28,884,553,554', '523,28,108,486,,488,487,471,282,,758,638,639,282,,,493,655,,,960,470', ',,,728,648,28,269,655,475,808,651,,,,,269,,300,28,28,,,285,771,,,933', ',16,262,668,108,555,702,300,,,602,769,,,,6,,,,121,,126,742,641,16,,594', ',747,,655,124,479,479,644,,608,,595,,,818,819,300,524,300,,820,28,,', '421,,267,532,895,,896,782,9,324,324,,399,,415,,,,,,,971,,625,,,,607', ',,,916,16,613,16,,,,,16,,,885,626,608,28,,608,,,505,,626,626,,609,,769', ',505,,614,,,,16,267,,883,,,,,,,,399,,,683,406,415,780,,,886,631,,,633', ',,,415,,,,,,,28,774,965,,,,,,390,28,813,647,,,609,,,609,909,,,,,,,28', '799,,267,,,285,655,,,16,,,399,924,,,,415,,,300,406,,,,640,,,,300,,,', '406,,823,28,,,28,738,740,,,,28,743,745,532,,420,696,696,121,,126,,28', '602,,,,,28,669,124,285,715,664,,,285,731,,,988,,963,964,505,,,761,406', '961,,,602,,626,773,,28,28,479,,862,683,28,28,797,,28,,,,872,,,608,,', '16,,,,822,,395,776,781,,,,,,718,,,761,,891,724,,,,,602,,,,,,,,,776,', '776,,737,,809,807,,,,267,,,28,28,,,,,,399,415,,831,,,,16,300,,16,,609', '121,,614,,,,300,,,,,479,,,28,,,,,,28,,,,,,28,28,,683,,683,,28,761,816', ',,972,,821,,28,,,,,,,855,,,,859,,,406,,,,,,655,,17,,,878,602,,17,,28', ',28,28,,,,,887,,,324,28,213,,,,,,,,213,213,213,,17,291,291,,,,,,,,920', '683,28,,28,28,,,,,,16,16,213,28,28,,,213,213,696,,213,334,,,,,888,,', ',,,,,,,,,,,,,,692,,683,694,683,28,,,,28,18,,16,16,,17,18,,,16,213,213', '213,213,17,,324,,,,,,755,,,,,683,28,324,,,300,18,293,293,,,,,776,,300', '931,,,,,16,267,16,16,,,28,,,,415,399,16,,,,415,602,336,,,28,776,,791', ',28,793,,28,28,,,,,,,,,16,16,,,,28,,,,,16,,17,213,213,213,18,,213,213', '213,213,213,213,,18,,783,784,,,,,,,17,,,,,,392,,406,,,16,423,,,16,,', ',,,,,,,,,,,19,,,,213,,19,,,,213,,,213,,16,829,,,,,,,,,,,,,,17,,17,19', ',,291,17,,,,16,,,,,18,,482,,484,,,291,,849,16,851,852,,,16,,17,16,16', '338,856,,18,,,,,,,213,213,,,,897,,,899,,,,,567,,567,,,880,881,,525,', ',,,,19,,,917,,,918,,919,19,,,,,,,,,,,,,,,,18,,18,,,17,293,18,,,,,905', ',,,908,,,,,,,293,,,,,,,,,,18,,,,,,,,,,598,,928,,,,966,,,967,213,968', ',,,,568,,568,,,,,,977,,19,,946,,,,,419,,,,,,,,,,958,,,,,962,19,,,,,', ',990,,,,18,,,,,17,,,,,,,291,,213,,,,,,,291,,,642,,,525,,645,213,646', ',,,,,,,,,,,,,,,,19,,19,,,,,19,,,,,,,,642,,,525,17,,,17,,,41,,,213,,', '41,,19,,,,,,,213,,,,,,213,,,,,,,,,18,,,41,290,290,,293,,,,,,,,,293,', ',,213,213,,,,,213,213,,,213,,,,40,,333,,,355,40,,732,,,,642,525,19,', ',,,,,,,,,,,,18,,291,18,,40,289,289,,,,41,,291,,,,,,,41,,,,770,,17,17', ',,,,,,,,,,332,,,354,,,,,,778,,,,,,,,,,,,,213,,,794,,,213,,,,,,17,17', ',40,,,,17,,,423,,40,,,,213,19,,,,,,,,,,,293,,,,,41,,,,,,293,,,830,,', ',17,,17,17,,,18,18,,,41,,17,,,,,,,,,,,,,,,,,,,,,19,,,19,213,,17,17,', ',,677,679,680,,,17,213,40,18,18,,,,,828,18,,,,,,,,,,41,,41,,,40,290', '41,,,,,,,902,,17,,,,17,,,290,912,,,525,,18,419,18,18,41,,,,,,,,18,,', ',,,,,17,,,,,,,,,,355,,355,,,40,,40,,18,18,289,40,,,,17,927,,18,,,,,', ',,,289,19,19,17,,,,,17,,40,17,17,,,,41,,,,,,,,,568,213,18,,,,18,,,,914', '354,,354,,,,,,,,,19,19,,,,,,19,,,,,,18,,,,,,,,,,,,,,,,,,,,40,,,,,,18', ',,,,,,19,,19,19,,,,,18,,,,19,18,,,18,18,,,,837,839,840,,,41,,,,,,,290', ',,,,,19,19,,290,,,,,,,19,,,864,865,,,867,869,,871,,,,,,,,,,,,,,,,,,', ',,,,,,,19,,,41,19,40,41,,915,,,,289,,,,,,,,,289,,,,,,,,,,,,19,,,,,,', ',,,,,,,,,,,,,,,,,,,19,,,,,,,,40,,,40,,,,19,935,936,938,940,19,941,,19', '19,,,,,,,,,,,,,,951,953,954,955,,,290,,,,,,,,,,,290,,,,,,,,,,,,,41,41', ',,,,,,,,,,,,,,,,,983,985,986,987,,,,,,,,,989,,,,,,,,,289,,,,991,,41', '41,,,,289,,41,,,,,,,,,,,40,40,,,,,,,,,,,,,,,,,,,,,,,,,,,41,,41,41,,', ',,,,,,41,,,,,,40,40,,,,,,40,,,,,,,,,,220,,,,41,41,,,266,266,266,,,,41', ',,,,,,310,311,312,,,,,,40,,40,40,,,,266,,,,,40,,,,,,,355,,41,,,,41,', ',,911,,,,,,,,,,40,40,,,,,,,,,40,,,,,41,,,,,,,,,,,,,,,,,,,,,,,,,,41,', ',354,,40,,,,40,,,,910,,41,,,,,41,,,41,41,,,,,,,,,,,,,,40,,,,,,,,,,,', ',,,,,,,,,,,,,,40,,,,266,397,266,,,417,422,,,,,40,,,,,40,,,40,40,220', ',,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453', '454,455,456,457,458,459,460,461,462,,,,,,266,,,,,,266,,,266,,,,,,,266', ',266,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,511,,,,,,,266,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266,,417,624,397,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,266,,,266,,266,,266,,,,,,,,,,,266,,,,,,,,', ',661,662,663,,,,,,,,,266,,,266,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '266,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266,734,,,266,266,739,741', ',,,,744,746,,,624,748,,,,,,,,,,,,,,,,,,,,,,,,,,,266,,,,,,,,,,,,,,,,', ',,,,,,266,,,,,,,,,,,,,,,,266,,,,,,,,,,,,,,,,,,,266,,,,,,,,,,,,266,,', ',,,,,,,,,,,,,,,,,266,,832,,,,,,,,,,,,,,739,741,746,744,,835,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,266,832,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,266' ] racc_goto_table = arr = ::Array.new(3064, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '6,33,22,10,85,85,13,71,57,20,50,2,58,58,62,62,143,25,52,35,35,35,57', '134,61,61,33,66,66,66,88,17,17,44,29,72,40,86,72,44,29,38,38,47,9,26', '92,91,5,179,9,8,19,19,44,66,19,6,139,87,87,174,44,44,44,48,44,138,39', '39,39,131,58,67,67,14,25,6,46,6,6,6,6,6,51,127,58,175,179,44,38,38,128', '159,44,44,173,69,44,19,19,19,19,56,14,56,64,64,125,91,5,55,136,3,165', '45,45,45,165,48,11,165,68,68,68,41,7,161,15,70,18,161,70,21,41,41,44', '32,64,48,71,44,44,44,44,44,42,9,43,63,68,65,80,81,82,84,9,89,31,136', '72,72,90,31,31,93,94,31,95,128,96,23,179,97,98,99,100,23,101,22,22,102', '103,175,22,22,104,105,106,107,35,108,109,110,111,112,66,139,113,129', '6,137,66,140,23,58,138,141,52,142,31,31,31,31,132,128,144,52,145,146', '143,149,150,7,151,152,153,134,154,127,44,44,44,44,155,125,44,44,44,44', '44,44,156,35,136,1,174,25,160,35,128,66,35,44,33,88,173,55,162,6,66', '163,132,164,132,166,6,6,38,38,26,69,134,167,23,33,168,169,50,131,67', '170,48,23,171,172,44,178,,,173,47,44,,,44,47,41,,26,,,,86,,,,31,31,31', '31,25,44,,44,87,19,19,6,44,91,5,,9,8,69,46,,134,48,48,46,,,51,38,,,14', '45,,,,165,48,44,68,38,45,26,48,,,,,68,,64,44,44,,,12,52,,,92,,23,69', '48,91,5,25,64,,,33,71,,,,6,,,,58,,62,40,72,23,,2,,40,,38,61,6,6,179', ',6,,17,,,10,10,64,68,64,,143,44,,,20,,35,134,132,,132,67,9,31,31,,6', ',58,,,,,,,13,,33,,,,39,,,,132,23,39,23,,,,,23,,,26,6,6,44,,6,,,50,,6', '6,,69,,71,,50,,69,,,,23,35,,85,,,,,,,,6,,,126,69,58,29,,,10,39,,,39', ',,,58,,,,,,,44,48,132,,,,,,12,44,25,9,,,69,,,69,85,,,,,,,44,48,,35,', ',12,38,,,23,,,6,85,,,,58,,,64,69,,,,68,,,,64,,,,69,,48,44,,,44,22,22', ',,,44,22,22,134,,22,91,91,58,,62,,44,33,,,,,44,68,61,12,91,31,,,12,17', ',,26,,10,10,50,,,6,69,88,,,33,,6,50,,44,44,6,,48,126,44,44,126,,44,', ',,48,,,6,,,23,,,,57,,66,6,6,,,,,,31,,,6,,48,31,,,,,33,,,,,,,,,6,,6,', '68,,19,66,,,,35,,,44,44,,,,,,6,58,,22,,,,23,64,,23,,69,58,,69,,,,64', ',,,,6,,,44,,,,,,44,,,,,,44,44,,126,,126,,44,6,91,,,25,,91,,44,,,,,,', '6,,,,6,,,69,,,,,,38,,24,,,19,33,,24,,44,,44,44,,,,,19,,,31,44,24,,,', ',,,,24,24,24,,24,24,24,,,,,,,,126,126,44,,44,44,,,,,,23,23,24,44,44', ',,24,24,91,,24,24,,,,,91,,,,,,,,,,,,,,,,,12,,126,12,126,44,,,,44,27', ',23,23,,24,27,,,23,24,24,24,24,24,,31,,,,,,130,,,,,126,44,31,,,64,27', '27,27,,,,,6,,64,91,,,,,23,35,23,23,,,44,,,,58,6,23,,,,58,33,27,,,44', '6,,130,,44,130,,44,44,,,,,,,,,23,23,,,,44,,,,,23,,24,24,24,24,27,,24', '24,24,24,24,24,,27,,12,12,,,,,,,24,,,,,,30,,69,,,23,30,,,23,,,,,,,,', ',,,,,28,,,,24,,28,,,,24,,,24,,23,12,,,,,,,,,,,,,,24,,24,28,,,24,24,', ',,23,,,,,27,,30,,30,,,24,,12,23,12,12,,,23,,24,23,23,28,12,,27,,,,,', ',24,24,,,,130,,,130,,,,,24,,24,,,12,12,,30,,,,,,28,,,130,,,130,,130', '28,,,,,,,,,,,,,,,,27,,27,,,24,27,27,,,,,12,,,,12,,,,,,,27,,,,,,,,,,27', ',,,,,,,,,30,,12,,,,130,,,130,24,130,,,,,27,,27,,,,,,130,,28,,12,,,,', '28,,,,,,,,,,12,,,,,12,28,,,,,,,130,,,,27,,,,,24,,,,,,,24,,24,,,,,,,24', ',,30,,,30,,30,24,30,,,,,,,,,,,,,,,,,28,,28,,,,,28,,,,,,,,30,,,30,24', ',,24,,,54,,,24,,,54,,28,,,,,,,24,,,,,,24,,,,,,,,,27,,,54,54,54,,27,', ',,,,,,,27,,,,24,24,,,,,24,24,,,24,,,,53,,54,,,54,53,,30,,,,30,30,28', ',,,,,,,,,,,,,27,,24,27,,53,53,53,,,,54,,24,,,,,,,54,,,,30,,24,24,,,', ',,,,,,,53,,,53,,,,,,30,,,,,,,,,,,,,24,,,30,,,24,,,,,,24,24,,53,,,,24', ',,30,,53,,,,24,28,,,,,,,,,,,27,,,,,54,,,,,,27,,,30,,,,24,,24,24,,,27', '27,,,54,,24,,,,,,,,,,,,,,,,,,,,,28,,,28,24,,24,24,,,,133,133,133,,,24', '24,53,27,27,,,,,27,27,,,,,,,,,,54,,54,,,53,54,54,,,,,,,24,,24,,,,24', ',,54,24,,,30,,27,28,27,27,54,,,,,,,,27,,,,,,,,24,,,,,,,,,,54,,54,,,53', ',53,,27,27,53,53,,,,24,30,,27,,,,,,,,,53,28,28,24,,,,,24,,53,24,24,', ',,54,,,,,,,,,27,24,27,,,,27,,,,27,53,,53,,,,,,,,,28,28,,,,,,28,,,,,', '27,,,,,,,,,,,,,,,,,,,,53,,,,,,27,,,,,,,28,,28,28,,,,,27,,,,28,27,,,27', '27,,,,133,133,133,,,54,,,,,,,54,,,,,,28,28,,54,,,,,,,28,,,133,133,,', '133,133,,133,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,54,28,53,54,,28,,,,53,,,', ',,,,,53,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,,,,53,,,53,,,', '28,133,133,133,133,28,133,,28,28,,,,,,,,,,,,,,133,133,133,133,,,54,', ',,,,,,,,,54,,,,,,,,,,,,,54,54,,,,,,,,,,,,,,,,,,133,133,133,133,,,,,', ',,,133,,,,,,,,,53,,,,133,,54,54,,,,53,,54,,,,,,,,,,,53,53,,,,,,,,,,', ',,,,,,,,,,,,,,,,54,,54,54,,,,,,,,,54,,,,,,53,53,,,,,,53,,,,,,,,,,34', ',,,54,54,,,34,34,34,,,,54,,,,,,,34,34,34,,,,,,53,,53,53,,,,34,,,,,53', ',,,,,,54,,54,,,,54,,,,54,,,,,,,,,,53,53,,,,,,,,,53,,,,,54,,,,,,,,,,', ',,,,,,,,,,,,,,,54,,,53,,53,,,,53,,,,53,,54,,,,,54,,,54,54,,,,,,,,,,', ',,,53,,,,,,,,,,,,,,,,,,,,,,,,,,53,,,,34,34,34,,,34,34,,,,,53,,,,,53', ',,53,53,34,,,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34,34', '34,34,34,34,34,34,34,,,,,,34,,,,,,34,,,34,,,,,,,34,,34,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,34,,,,,,,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,34,,34,34,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',34,,,34,,34,,34,,,,,,,,,,,34,,,,,,,,,,34,34,34,,,,,,,,,34,,,34,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,34,34,,,34,34,34,34,,,,,34,34,,,34,34,,,,,,,,,,,,,,,,,,,,,,', ',,,,34,,,,,,,,,,,,,,,,,,,,,,,34,,,,,,,,,,,,,,,,34,,,,,,,,,,,,,,,,,,', '34,,,,,,,,,,,,34,,,,,,,,,,,,,,,,,,,,34,,34,,,,,,,,,,,,,,34,34,34,34', ',34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,34,34,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,34' ] racc_goto_check = arr = ::Array.new(3064, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_goto_pointer = [ nil, 245, 9, 113, nil, 43, -2, 118, 46, 42, -311, 110, 327, -507, -590, -647, nil, 20, 118, -11, -197, 65, -21, 169, 786, -185, -353, 884, 1035, -166, 814, 100, 21, -21, 2116, -12, nil, nil, -162, 40, -218, -338, -322, -618, 31, 84, 43, 8, -145, nil, -26, 47, -286, 1403, 1339, -454, -237, -63, 1, nil, nil, 13, 3, -240, 70, 92, -4, -244, 91, 68, -335, -262, -443, nil, nil, nil, nil, nil, nil, nil, 81, -167, 93, nil, 93, -321, -655, -494, -300, 89, -407, 42, -526, 94, -187, 111, -145, 113, 109, -520, 110, -520, -381, -702, 117, -527, -153, -529, -697, 122, -378, -158, -378, -624, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, -688, -43, -455, -706, -429, 280, -557, -414, 1066, -300, nil, -516, -561, -695, -704, -120, -319, 147, -307, 191, -32, -411, nil, nil, -37, -414, -35, -412, -702, -329, -432, -537, nil, nil, 16, 169, 46, 176, 178, -103, -245, 181, -452, -304, -304, 196, -432, -391, -580, -617, -751, nil, nil, -70, -432 ] racc_goto_default = [ nil, nil, nil, nil, 5, nil, 279, 7, 331, 280, nil, nil, 513, nil, 801, nil, 278, nil, nil, nil, 14, 15, 21, 219, 309, nil, nil, 217, 218, nil, 272, 20, nil, 429, 24, 25, 26, 27, 658, nil, nil, nil, nil, nil, 297, 400, 34, nil, nil, 36, 39, 38, nil, 214, 215, 566, nil, 123, 408, 122, 125, 75, 76, nil, 48, nil, 401, nil, 402, 413, 610, 477, 270, 255, 49, 50, 51, 52, 53, 54, 55, nil, 256, 61, nil, nil, nil, nil, nil, nil, nil, 550, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 685, 539, nil, 686, nil, 529, nil, 531, nil, 789, 627, nil, nil, nil, 537, nil, nil, nil, 722, nil, nil, nil, 412, 257, nil, nil, nil, nil, nil, nil, nil, nil, 74, 77, 78, nil, nil, nil, nil, nil, 583, nil, nil, nil, nil, nil, nil, 530, 541, 542, 764, 545, 548, nil, 274 ] racc_reduce_table = [ 0, 0, :racc_error, 0, 140, :_reduce_1, 2, 138, :_reduce_2, 2, 139, :_reduce_3, 1, 141, :_reduce_none, 1, 141, :_reduce_none, 3, 141, :_reduce_6, 2, 141, :_reduce_none, 1, 144, :_reduce_none, 0, 148, :_reduce_9, 5, 144, :_reduce_10, 4, 147, :_reduce_11, 2, 149, :_reduce_12, 1, 153, :_reduce_none, 1, 153, :_reduce_none, 3, 153, :_reduce_15, 2, 153, :_reduce_16, 0, 169, :_reduce_17, 4, 146, :_reduce_18, 3, 146, :_reduce_19, 3, 146, :_reduce_20, 3, 146, :_reduce_21, 2, 146, :_reduce_22, 3, 146, :_reduce_23, 3, 146, :_reduce_24, 3, 146, :_reduce_25, 3, 146, :_reduce_26, 3, 146, :_reduce_27, 4, 146, :_reduce_28, 1, 146, :_reduce_none, 3, 146, :_reduce_30, 3, 146, :_reduce_31, 6, 146, :_reduce_32, 5, 146, :_reduce_33, 5, 146, :_reduce_34, 5, 146, :_reduce_35, 5, 146, :_reduce_36, 3, 146, :_reduce_37, 3, 146, :_reduce_38, 3, 146, :_reduce_39, 3, 146, :_reduce_40, 1, 146, :_reduce_none, 3, 157, :_reduce_42, 3, 157, :_reduce_43, 1, 168, :_reduce_none, 3, 168, :_reduce_45, 3, 168, :_reduce_46, 3, 168, :_reduce_47, 2, 168, :_reduce_48, 1, 168, :_reduce_none, 1, 156, :_reduce_50, 1, 159, :_reduce_none, 1, 159, :_reduce_none, 1, 173, :_reduce_none, 4, 173, :_reduce_54, 4, 173, :_reduce_55, 0, 179, :_reduce_56, 0, 180, :_reduce_57, 6, 177, :_reduce_58, 2, 172, :_reduce_59, 3, 172, :_reduce_60, 4, 172, :_reduce_61, 5, 172, :_reduce_62, 4, 172, :_reduce_63, 5, 172, :_reduce_64, 2, 172, :_reduce_65, 2, 172, :_reduce_66, 2, 172, :_reduce_67, 2, 172, :_reduce_68, 2, 172, :_reduce_69, 1, 158, :_reduce_none, 3, 158, :_reduce_71, 1, 184, :_reduce_none, 3, 184, :_reduce_73, 1, 183, :_reduce_74, 2, 183, :_reduce_75, 3, 183, :_reduce_76, 5, 183, :_reduce_77, 2, 183, :_reduce_78, 4, 183, :_reduce_79, 2, 183, :_reduce_80, 4, 183, :_reduce_81, 1, 183, :_reduce_82, 3, 183, :_reduce_83, 1, 187, :_reduce_none, 3, 187, :_reduce_85, 2, 186, :_reduce_86, 3, 186, :_reduce_87, 1, 189, :_reduce_88, 3, 189, :_reduce_89, 1, 188, :_reduce_90, 1, 188, :_reduce_91, 4, 188, :_reduce_92, 3, 188, :_reduce_93, 3, 188, :_reduce_94, 3, 188, :_reduce_95, 3, 188, :_reduce_96, 2, 188, :_reduce_97, 1, 188, :_reduce_98, 1, 165, :_reduce_99, 1, 165, :_reduce_100, 4, 165, :_reduce_101, 3, 165, :_reduce_102, 3, 165, :_reduce_103, 3, 165, :_reduce_104, 3, 165, :_reduce_105, 2, 165, :_reduce_106, 1, 165, :_reduce_107, 1, 192, :_reduce_108, 1, 192, :_reduce_none, 2, 193, :_reduce_110, 1, 193, :_reduce_111, 3, 193, :_reduce_112, 1, 194, :_reduce_none, 1, 194, :_reduce_none, 1, 194, :_reduce_none, 1, 194, :_reduce_116, 1, 194, :_reduce_117, 1, 197, :_reduce_none, 1, 197, :_reduce_none, 1, 154, :_reduce_120, 1, 154, :_reduce_none, 1, 155, :_reduce_122, 0, 200, :_reduce_123, 4, 155, :_reduce_124, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 195, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 1, 196, :_reduce_none, 3, 171, :_reduce_195, 5, 171, :_reduce_196, 3, 171, :_reduce_197, 5, 171, :_reduce_198, 6, 171, :_reduce_199, 5, 171, :_reduce_200, 5, 171, :_reduce_201, 5, 171, :_reduce_202, 5, 171, :_reduce_203, 4, 171, :_reduce_204, 3, 171, :_reduce_205, 3, 171, :_reduce_206, 3, 171, :_reduce_207, 3, 171, :_reduce_208, 3, 171, :_reduce_209, 3, 171, :_reduce_210, 3, 171, :_reduce_211, 3, 171, :_reduce_212, 3, 171, :_reduce_213, 4, 171, :_reduce_214, 4, 171, :_reduce_215, 2, 171, :_reduce_216, 2, 171, :_reduce_217, 3, 171, :_reduce_218, 3, 171, :_reduce_219, 3, 171, :_reduce_220, 3, 171, :_reduce_221, 3, 171, :_reduce_222, 3, 171, :_reduce_223, 3, 171, :_reduce_224, 3, 171, :_reduce_225, 3, 171, :_reduce_226, 3, 171, :_reduce_227, 3, 171, :_reduce_228, 3, 171, :_reduce_229, 3, 171, :_reduce_230, 2, 171, :_reduce_231, 2, 171, :_reduce_232, 3, 171, :_reduce_233, 3, 171, :_reduce_234, 3, 171, :_reduce_235, 3, 171, :_reduce_236, 3, 171, :_reduce_237, 6, 171, :_reduce_238, 1, 171, :_reduce_none, 1, 167, :_reduce_240, 1, 202, :_reduce_none, 2, 202, :_reduce_242, 4, 202, :_reduce_243, 2, 202, :_reduce_244, 3, 206, :_reduce_245, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 162, :_reduce_248, 1, 162, :_reduce_249, 2, 162, :_reduce_250, 4, 162, :_reduce_251, 2, 162, :_reduce_252, 1, 182, :_reduce_253, 2, 182, :_reduce_254, 2, 182, :_reduce_255, 4, 182, :_reduce_256, 1, 182, :_reduce_none, 0, 210, :_reduce_258, 2, 176, :_reduce_259, 2, 209, :_reduce_260, 2, 208, :_reduce_261, 1, 208, :_reduce_none, 1, 203, :_reduce_263, 2, 203, :_reduce_264, 3, 203, :_reduce_265, 4, 203, :_reduce_266, 3, 166, :_reduce_267, 4, 166, :_reduce_268, 2, 166, :_reduce_269, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_278, 0, 232, :_reduce_279, 4, 201, :_reduce_280, 0, 233, :_reduce_281, 4, 201, :_reduce_282, 3, 201, :_reduce_283, 3, 201, :_reduce_284, 2, 201, :_reduce_285, 3, 201, :_reduce_286, 0, 234, :_reduce_287, 4, 201, :_reduce_288, 1, 201, :_reduce_289, 4, 201, :_reduce_290, 3, 201, :_reduce_291, 1, 201, :_reduce_292, 5, 201, :_reduce_293, 4, 201, :_reduce_294, 3, 201, :_reduce_295, 2, 201, :_reduce_296, 1, 201, :_reduce_none, 2, 201, :_reduce_298, 2, 201, :_reduce_299, 6, 201, :_reduce_300, 6, 201, :_reduce_301, 0, 235, :_reduce_302, 0, 236, :_reduce_303, 7, 201, :_reduce_304, 0, 237, :_reduce_305, 0, 238, :_reduce_306, 7, 201, :_reduce_307, 5, 201, :_reduce_308, 4, 201, :_reduce_309, 0, 239, :_reduce_310, 0, 240, :_reduce_311, 9, 201, :_reduce_312, 0, 241, :_reduce_313, 0, 242, :_reduce_314, 7, 201, :_reduce_315, 0, 243, :_reduce_316, 0, 244, :_reduce_317, 0, 245, :_reduce_318, 9, 201, :_reduce_319, 0, 246, :_reduce_320, 0, 247, :_reduce_321, 6, 201, :_reduce_322, 0, 248, :_reduce_323, 6, 201, :_reduce_324, 0, 249, :_reduce_325, 0, 250, :_reduce_326, 9, 201, :_reduce_327, 1, 201, :_reduce_328, 1, 201, :_reduce_329, 1, 201, :_reduce_330, 1, 201, :_reduce_331, 1, 161, :_reduce_332, 1, 251, :_reduce_none, 1, 252, :_reduce_none, 1, 253, :_reduce_none, 1, 254, :_reduce_none, 1, 255, :_reduce_none, 1, 256, :_reduce_none, 1, 257, :_reduce_none, 1, 258, :_reduce_none, 1, 259, :_reduce_none, 1, 260, :_reduce_none, 1, 261, :_reduce_none, 1, 222, :_reduce_none, 1, 222, :_reduce_none, 2, 222, :_reduce_none, 1, 224, :_reduce_none, 1, 224, :_reduce_none, 1, 223, :_reduce_none, 5, 223, :_reduce_350, 1, 151, :_reduce_none, 2, 151, :_reduce_352, 1, 226, :_reduce_none, 1, 226, :_reduce_354, 1, 262, :_reduce_none, 3, 262, :_reduce_356, 1, 265, :_reduce_357, 3, 265, :_reduce_358, 1, 264, :_reduce_359, 4, 264, :_reduce_360, 6, 264, :_reduce_361, 3, 264, :_reduce_362, 5, 264, :_reduce_363, 2, 264, :_reduce_364, 4, 264, :_reduce_365, 1, 264, :_reduce_366, 3, 264, :_reduce_367, 6, 266, :_reduce_368, 8, 266, :_reduce_369, 4, 266, :_reduce_370, 6, 266, :_reduce_371, 4, 266, :_reduce_372, 2, 266, :_reduce_373, 6, 266, :_reduce_374, 2, 266, :_reduce_375, 4, 266, :_reduce_376, 6, 266, :_reduce_377, 2, 266, :_reduce_378, 4, 266, :_reduce_379, 2, 266, :_reduce_380, 4, 266, :_reduce_381, 1, 266, :_reduce_382, 1, 178, :_reduce_383, 1, 178, :_reduce_none, 3, 272, :_reduce_385, 1, 272, :_reduce_386, 4, 272, :_reduce_387, 1, 273, :_reduce_none, 2, 273, :_reduce_389, 1, 274, :_reduce_390, 3, 274, :_reduce_391, 1, 275, :_reduce_392, 1, 275, :_reduce_none, 0, 279, :_reduce_394, 3, 221, :_reduce_395, 4, 277, :_reduce_396, 1, 277, :_reduce_397, 3, 278, :_reduce_398, 3, 278, :_reduce_399, 0, 282, :_reduce_400, 0, 283, :_reduce_401, 6, 281, :_reduce_402, 2, 174, :_reduce_403, 4, 174, :_reduce_404, 4, 174, :_reduce_405, 0, 285, :_reduce_406, 3, 220, :_reduce_407, 4, 220, :_reduce_408, 4, 220, :_reduce_409, 3, 220, :_reduce_410, 3, 220, :_reduce_411, 3, 220, :_reduce_412, 2, 220, :_reduce_413, 1, 220, :_reduce_414, 4, 220, :_reduce_415, 0, 286, :_reduce_416, 0, 287, :_reduce_417, 6, 219, :_reduce_418, 0, 288, :_reduce_419, 0, 289, :_reduce_420, 6, 219, :_reduce_421, 0, 291, :_reduce_422, 6, 225, :_reduce_423, 1, 290, :_reduce_none, 1, 290, :_reduce_none, 6, 150, :_reduce_426, 0, 150, :_reduce_427, 1, 292, :_reduce_428, 1, 292, :_reduce_none, 1, 292, :_reduce_none, 2, 293, :_reduce_431, 1, 293, :_reduce_none, 2, 152, :_reduce_433, 1, 152, :_reduce_none, 1, 211, :_reduce_435, 1, 211, :_reduce_436, 1, 211, :_reduce_none, 1, 212, :_reduce_438, 1, 295, :_reduce_none, 2, 295, :_reduce_440, 3, 296, :_reduce_441, 1, 296, :_reduce_442, 3, 213, :_reduce_443, 3, 214, :_reduce_444, 3, 215, :_reduce_445, 3, 215, :_reduce_446, 1, 300, :_reduce_447, 3, 300, :_reduce_448, 1, 301, :_reduce_none, 2, 301, :_reduce_450, 3, 216, :_reduce_451, 3, 216, :_reduce_452, 1, 303, :_reduce_453, 3, 303, :_reduce_454, 1, 297, :_reduce_455, 2, 297, :_reduce_456, 1, 298, :_reduce_457, 2, 298, :_reduce_458, 1, 299, :_reduce_459, 2, 299, :_reduce_460, 1, 302, :_reduce_461, 0, 305, :_reduce_462, 3, 302, :_reduce_463, 0, 306, :_reduce_464, 4, 302, :_reduce_465, 1, 304, :_reduce_466, 1, 304, :_reduce_467, 1, 304, :_reduce_468, 1, 304, :_reduce_none, 2, 198, :_reduce_470, 1, 198, :_reduce_471, 1, 307, :_reduce_none, 1, 307, :_reduce_none, 1, 307, :_reduce_none, 1, 307, :_reduce_none, 3, 199, :_reduce_476, 1, 294, :_reduce_none, 1, 294, :_reduce_none, 2, 294, :_reduce_479, 2, 294, :_reduce_480, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 191, :_reduce_486, 1, 191, :_reduce_487, 1, 191, :_reduce_488, 1, 191, :_reduce_489, 1, 191, :_reduce_490, 1, 191, :_reduce_491, 1, 191, :_reduce_492, 1, 217, :_reduce_493, 1, 217, :_reduce_494, 1, 160, :_reduce_495, 1, 160, :_reduce_496, 1, 164, :_reduce_497, 1, 164, :_reduce_498, 1, 227, :_reduce_499, 0, 308, :_reduce_500, 4, 227, :_reduce_501, 2, 227, :_reduce_502, 3, 229, :_reduce_503, 2, 229, :_reduce_504, 6, 280, :_reduce_505, 8, 280, :_reduce_506, 4, 280, :_reduce_507, 6, 280, :_reduce_508, 4, 280, :_reduce_509, 6, 280, :_reduce_510, 2, 280, :_reduce_511, 4, 280, :_reduce_512, 6, 280, :_reduce_513, 2, 280, :_reduce_514, 4, 280, :_reduce_515, 2, 280, :_reduce_516, 4, 280, :_reduce_517, 1, 280, :_reduce_518, 0, 280, :_reduce_519, 1, 276, :_reduce_520, 1, 276, :_reduce_521, 1, 276, :_reduce_522, 1, 276, :_reduce_523, 1, 263, :_reduce_none, 1, 263, :_reduce_525, 1, 310, :_reduce_none, 3, 310, :_reduce_527, 1, 267, :_reduce_528, 3, 267, :_reduce_529, 3, 311, :_reduce_530, 3, 312, :_reduce_531, 1, 268, :_reduce_532, 3, 268, :_reduce_533, 1, 309, :_reduce_534, 3, 309, :_reduce_535, 1, 313, :_reduce_none, 1, 313, :_reduce_none, 2, 269, :_reduce_538, 1, 269, :_reduce_539, 1, 314, :_reduce_none, 1, 314, :_reduce_none, 2, 271, :_reduce_542, 2, 270, :_reduce_543, 0, 270, :_reduce_544, 1, 230, :_reduce_none, 0, 315, :_reduce_546, 4, 230, :_reduce_547, 1, 218, :_reduce_548, 2, 218, :_reduce_549, 1, 205, :_reduce_none, 3, 205, :_reduce_551, 3, 316, :_reduce_552, 3, 316, :_reduce_553, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 175, :_reduce_none, 1, 175, :_reduce_none, 1, 175, :_reduce_none, 1, 175, :_reduce_none, 1, 284, :_reduce_none, 1, 284, :_reduce_none, 1, 284, :_reduce_none, 1, 231, :_reduce_none, 1, 231, :_reduce_none, 0, 142, :_reduce_none, 1, 142, :_reduce_none, 0, 170, :_reduce_none, 1, 170, :_reduce_none, 2, 185, :_reduce_none, 2, 163, :_reduce_none, 0, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 228, :_reduce_575, 1, 228, :_reduce_none, 1, 145, :_reduce_none, 2, 145, :_reduce_578, 0, 143, :_reduce_579 ] racc_reduce_n = 580 racc_shift_n = 992 racc_token_table = { false => 0, :error => 1, :kCLASS => 2, :kMODULE => 3, :kDEF => 4, :kUNDEF => 5, :kBEGIN => 6, :kRESCUE => 7, :kENSURE => 8, :kEND => 9, :kIF => 10, :kUNLESS => 11, :kTHEN => 12, :kELSIF => 13, :kELSE => 14, :kCASE => 15, :kWHEN => 16, :kWHILE => 17, :kUNTIL => 18, :kFOR => 19, :kBREAK => 20, :kNEXT => 21, :kREDO => 22, :kRETRY => 23, :kIN => 24, :kDO => 25, :kDO_COND => 26, :kDO_BLOCK => 27, :kDO_LAMBDA => 28, :kRETURN => 29, :kYIELD => 30, :kSUPER => 31, :kSELF => 32, :kNIL => 33, :kTRUE => 34, :kFALSE => 35, :kAND => 36, :kOR => 37, :kNOT => 38, :kIF_MOD => 39, :kUNLESS_MOD => 40, :kWHILE_MOD => 41, :kUNTIL_MOD => 42, :kRESCUE_MOD => 43, :kALIAS => 44, :kDEFINED => 45, :klBEGIN => 46, :klEND => 47, :k__LINE__ => 48, :k__FILE__ => 49, :k__ENCODING__ => 50, :tIDENTIFIER => 51, :tFID => 52, :tGVAR => 53, :tIVAR => 54, :tCONSTANT => 55, :tLABEL => 56, :tCVAR => 57, :tNTH_REF => 58, :tBACK_REF => 59, :tSTRING_CONTENT => 60, :tINTEGER => 61, :tFLOAT => 62, :tREGEXP_END => 63, :tUPLUS => 64, :tUMINUS => 65, :tUMINUS_NUM => 66, :tPOW => 67, :tCMP => 68, :tEQ => 69, :tEQQ => 70, :tNEQ => 71, :tGEQ => 72, :tLEQ => 73, :tANDOP => 74, :tOROP => 75, :tMATCH => 76, :tNMATCH => 77, :tDOT => 78, :tDOT2 => 79, :tDOT3 => 80, :tAREF => 81, :tASET => 82, :tLSHFT => 83, :tRSHFT => 84, :tCOLON2 => 85, :tCOLON3 => 86, :tOP_ASGN => 87, :tASSOC => 88, :tLPAREN => 89, :tLPAREN2 => 90, :tRPAREN => 91, :tLPAREN_ARG => 92, :tLBRACK => 93, :tLBRACK2 => 94, :tRBRACK => 95, :tLBRACE => 96, :tLBRACE_ARG => 97, :tSTAR => 98, :tSTAR2 => 99, :tAMPER => 100, :tAMPER2 => 101, :tTILDE => 102, :tPERCENT => 103, :tDIVIDE => 104, :tPLUS => 105, :tMINUS => 106, :tLT => 107, :tGT => 108, :tPIPE => 109, :tBANG => 110, :tCARET => 111, :tLCURLY => 112, :tRCURLY => 113, :tBACK_REF2 => 114, :tSYMBEG => 115, :tSTRING_BEG => 116, :tXSTRING_BEG => 117, :tREGEXP_BEG => 118, :tWORDS_BEG => 119, :tQWORDS_BEG => 120, :tSTRING_DBEG => 121, :tSTRING_DVAR => 122, :tSTRING_END => 123, :tSTRING => 124, :tSYMBOL => 125, :tNL => 126, :tEH => 127, :tCOLON => 128, :tCOMMA => 129, :tSPACE => 130, :tSEMI => 131, :tLAST_TOKEN => 132, :tLAMBDA => 133, :tLAMBEG => 134, :tEQL => 135, :tLOWEST => 136 } racc_nt_base = 137 racc_use_result_var = true Racc_arg = [ racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var ] Racc_token_to_s_table = [ "$end", "error", "kCLASS", "kMODULE", "kDEF", "kUNDEF", "kBEGIN", "kRESCUE", "kENSURE", "kEND", "kIF", "kUNLESS", "kTHEN", "kELSIF", "kELSE", "kCASE", "kWHEN", "kWHILE", "kUNTIL", "kFOR", "kBREAK", "kNEXT", "kREDO", "kRETRY", "kIN", "kDO", "kDO_COND", "kDO_BLOCK", "kDO_LAMBDA", "kRETURN", "kYIELD", "kSUPER", "kSELF", "kNIL", "kTRUE", "kFALSE", "kAND", "kOR", "kNOT", "kIF_MOD", "kUNLESS_MOD", "kWHILE_MOD", "kUNTIL_MOD", "kRESCUE_MOD", "kALIAS", "kDEFINED", "klBEGIN", "klEND", "k__LINE__", "k__FILE__", "k__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tLABEL", "tCVAR", "tNTH_REF", "tBACK_REF", "tSTRING_CONTENT", "tINTEGER", "tFLOAT", "tREGEXP_END", "tUPLUS", "tUMINUS", "tUMINUS_NUM", "tPOW", "tCMP", "tEQ", "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", "tDOT", "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN2", "tRPAREN", "tLPAREN_ARG", "tLBRACK", "tLBRACK2", "tRBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tSTAR2", "tAMPER", "tAMPER2", "tTILDE", "tPERCENT", "tDIVIDE", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAST_TOKEN", "tLAMBDA", "tLAMBEG", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "@1", "top_stmts", "opt_terms", "none", "top_stmt", "terms", "stmt", "bodystmt", "@2", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "var_lhs", "primary_value", "opt_call_args", "rbracket", "backref", "lhs", "mrhs", "arg_value", "expr", "@3", "opt_nl", "arg", "command", "block_command", "block_call", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "@4", "@5", "operation", "call_args", "mlhs_basic", "mlhs_inner", "rparen", "mlhs_head", "mlhs_item", "mlhs_node", "mlhs_post", "user_variable", "keyword_variable", "cname", "cpath", "fname", "op", "reswords", "fsym", "symbol", "dsym", "@6", "primary", "aref_args", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@7", "literal", "strings", "xstring", "regexp", "words", "qwords", "var_ref", "assoc_list", "brace_block", "method_call", "lambda", "then", "if_tail", "do", "case_body", "for_var", "superclass", "term", "f_arglist", "singleton", "dot_or_colon", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23", "@24", "@25", "@26", "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "f_marg", "f_norm_arg", "f_margs", "f_marg_list", "block_param", "f_arg", "f_block_optarg", "f_rest_arg", "opt_f_block_arg", "f_block_arg", "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "f_bad_arg", "f_larglist", "lambda_body", "@27", "f_args", "do_block", "@28", "@29", "operation3", "@30", "@31", "@32", "@33", "@34", "cases", "@35", "exc_list", "exc_var", "numeric", "string", "string1", "string_contents", "xstring_contents", "regexp_contents", "word_list", "word", "string_content", "qword_list", "string_dvar", "@36", "@37", "sym", "@38", "f_optarg", "f_arg_item", "f_opt", "f_block_opt", "restarg_mark", "blkarg_mark", "@39", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted def _reduce_1(val, _values, result) self.lexer.lex_state = :expr_beg result end def _reduce_2(val, _values, result) result = new_compstmt val result end def _reduce_3(val, _values, result) result = val[0] result end # reduce 4 omitted # reduce 5 omitted def _reduce_6(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 7 omitted # reduce 8 omitted def _reduce_9(val, _values, result) if (self.in_def || self.in_single > 0) then yyerror "BEGIN in method" end self.env.extend result end def _reduce_10(val, _values, result) result = new_iter s(:preexe), nil, val[3] result end def _reduce_11(val, _values, result) result = new_body val result end def _reduce_12(val, _values, result) result = new_compstmt val result end # reduce 13 omitted # reduce 14 omitted def _reduce_15(val, _values, result) result = self.block_append val[0], val[2] result end def _reduce_16(val, _values, result) result = val[1] result end def _reduce_17(val, _values, result) lexer.lex_state = :expr_fname result = self.lexer.lineno result end def _reduce_18(val, _values, result) result = s(:alias, val[1], val[3]).line(val[2]) result end def _reduce_19(val, _values, result) result = s(:valias, val[1].to_sym, val[2].to_sym) result end def _reduce_20(val, _values, result) result = s(:valias, val[1].to_sym, :"$#{val[2]}") result end def _reduce_21(val, _values, result) yyerror "can't make alias for the number variables" result end def _reduce_22(val, _values, result) result = val[1] result end def _reduce_23(val, _values, result) result = new_if val[2], val[0], nil result end def _reduce_24(val, _values, result) result = new_if val[2], nil, val[0] result end def _reduce_25(val, _values, result) result = new_while val[0], val[2], true result end def _reduce_26(val, _values, result) result = new_until val[0], val[2], true result end def _reduce_27(val, _values, result) result = s(:rescue, val[0], new_resbody(s(:array), val[2])) result end def _reduce_28(val, _values, result) if (self.in_def || self.in_single > 0) then yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] result end # reduce 29 omitted def _reduce_30(val, _values, result) result = new_masgn val[0], val[2], :wrap result end def _reduce_31(val, _values, result) result = new_op_asgn val result end def _reduce_32(val, _values, result) result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_33(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) result end def _reduce_34(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) result end def _reduce_35(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) result end def _reduce_36(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) result end def _reduce_37(val, _values, result) self.backref_assign_error val[0] result end def _reduce_38(val, _values, result) result = new_assign val[0], s(:svalue, val[2]) result end def _reduce_39(val, _values, result) result = new_masgn val[0], val[2], :wrap result end def _reduce_40(val, _values, result) result = new_masgn val[0], val[2] result end # reduce 41 omitted def _reduce_42(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_43(val, _values, result) result = new_assign val[0], val[2] result end # reduce 44 omitted def _reduce_45(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_46(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_47(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_48(val, _values, result) result = s(:call, val[1], :"!") result end # reduce 49 omitted def _reduce_50(val, _values, result) result = value_expr(val[0]) result end # reduce 51 omitted # reduce 52 omitted # reduce 53 omitted def _reduce_54(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_55(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_56(val, _values, result) self.env.extend(:dynamic) result = self.lexer.lineno result end def _reduce_57(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_58(val, _values, result) result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend result end def _reduce_59(val, _values, result) result = new_call nil, val[0].to_sym, val[1] result end def _reduce_60(val, _values, result) result = new_call nil, val[0].to_sym, val[1] if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end result end def _reduce_61(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_62(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block result end def _reduce_63(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_64(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block result end def _reduce_65(val, _values, result) result = new_super val[1] result end def _reduce_66(val, _values, result) result = new_yield val[1] result end def _reduce_67(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) result end def _reduce_68(val, _values, result) line = val[0].last result = s(:break, ret_args(val[1])).line(line) result end def _reduce_69(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) result end # reduce 70 omitted def _reduce_71(val, _values, result) result = val[1] result end # reduce 72 omitted def _reduce_73(val, _values, result) result = s(:masgn, s(:array, val[1])) result end def _reduce_74(val, _values, result) result = s(:masgn, val[0]) result end def _reduce_75(val, _values, result) result = s(:masgn, val[0] << val[1].compact) result end def _reduce_76(val, _values, result) result = s(:masgn, val[0] << s(:splat, val[2])) result end def _reduce_77(val, _values, result) ary = list_append val[0], s(:splat, val[2]) ary.concat val[4].sexp_body result = s(:masgn, ary) result end def _reduce_78(val, _values, result) result = s(:masgn, val[0] << s(:splat)) result end def _reduce_79(val, _values, result) ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_80(val, _values, result) result = s(:masgn, s(:array, s(:splat, val[1]))) result end def _reduce_81(val, _values, result) ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_82(val, _values, result) result = s(:masgn, s(:array, s(:splat))) result end def _reduce_83(val, _values, result) ary = s(:array, s(:splat)) ary.concat val[2].sexp_body result = s(:masgn, ary) result end # reduce 84 omitted def _reduce_85(val, _values, result) result = val[1] result end def _reduce_86(val, _values, result) result = s(:array, val[0]) result end def _reduce_87(val, _values, result) result = val[0] << val[1].compact result end def _reduce_88(val, _values, result) result = s(:array, val[0]) result end def _reduce_89(val, _values, result) result = list_append val[0], val[2] result end def _reduce_90(val, _values, result) result = self.assignable val[0] result end def _reduce_91(val, _values, result) result = self.assignable val[0] result end def _reduce_92(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_93(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_94(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_95(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_96(val, _values, result) if (self.in_def || self.in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) result end def _reduce_97(val, _values, result) if (self.in_def || self.in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) result end def _reduce_98(val, _values, result) self.backref_assign_error val[0] result end def _reduce_99(val, _values, result) result = self.assignable val[0] result end def _reduce_100(val, _values, result) result = self.assignable val[0] result end def _reduce_101(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_102(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_103(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_104(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_105(val, _values, result) if (self.in_def || self.in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) result end def _reduce_106(val, _values, result) if (self.in_def || self.in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) result end def _reduce_107(val, _values, result) self.backref_assign_error val[0] result end def _reduce_108(val, _values, result) yyerror "class/module name must be CONSTANT" result end # reduce 109 omitted def _reduce_110(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_111(val, _values, result) result = val[0].to_sym result end def _reduce_112(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end # reduce 113 omitted # reduce 114 omitted # reduce 115 omitted def _reduce_116(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end def _reduce_117(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end # reduce 118 omitted # reduce 119 omitted def _reduce_120(val, _values, result) result = s(:lit, val[0].to_sym) result end # reduce 121 omitted def _reduce_122(val, _values, result) result = new_undef val[0] result end def _reduce_123(val, _values, result) lexer.lex_state = :expr_fname result end def _reduce_124(val, _values, result) result = new_undef val[0], val[3] result end # reduce 125 omitted # reduce 126 omitted # reduce 127 omitted # reduce 128 omitted # reduce 129 omitted # reduce 130 omitted # reduce 131 omitted # reduce 132 omitted # reduce 133 omitted # reduce 134 omitted # reduce 135 omitted # reduce 136 omitted # reduce 137 omitted # reduce 138 omitted # reduce 139 omitted # reduce 140 omitted # reduce 141 omitted # reduce 142 omitted # reduce 143 omitted # reduce 144 omitted # reduce 145 omitted # reduce 146 omitted # reduce 147 omitted # reduce 148 omitted # reduce 149 omitted # reduce 150 omitted # reduce 151 omitted # reduce 152 omitted # reduce 153 omitted # reduce 154 omitted # reduce 155 omitted # reduce 156 omitted # reduce 157 omitted # reduce 158 omitted # reduce 159 omitted # reduce 160 omitted # reduce 161 omitted # reduce 162 omitted # reduce 163 omitted # reduce 164 omitted # reduce 165 omitted # reduce 166 omitted # reduce 167 omitted # reduce 168 omitted # reduce 169 omitted # reduce 170 omitted # reduce 171 omitted # reduce 172 omitted # reduce 173 omitted # reduce 174 omitted # reduce 175 omitted # reduce 176 omitted # reduce 177 omitted # reduce 178 omitted # reduce 179 omitted # reduce 180 omitted # reduce 181 omitted # reduce 182 omitted # reduce 183 omitted # reduce 184 omitted # reduce 185 omitted # reduce 186 omitted # reduce 187 omitted # reduce 188 omitted # reduce 189 omitted # reduce 190 omitted # reduce 191 omitted # reduce 192 omitted # reduce 193 omitted # reduce 194 omitted def _reduce_195(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_196(val, _values, result) result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) result end def _reduce_197(val, _values, result) result = new_op_asgn val result end def _reduce_198(val, _values, result) result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) result end def _reduce_199(val, _values, result) val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_200(val, _values, result) result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) result end def _reduce_201(val, _values, result) result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) result end def _reduce_202(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) result end def _reduce_203(val, _values, result) yyerror "constant re-assignment" result end def _reduce_204(val, _values, result) yyerror "constant re-assignment" result end def _reduce_205(val, _values, result) self.backref_assign_error val[0] result end def _reduce_206(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end result end def _reduce_207(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end result end def _reduce_208(val, _values, result) result = new_call val[0], :+, argl(val[2]) result end def _reduce_209(val, _values, result) result = new_call val[0], :-, argl(val[2]) result end def _reduce_210(val, _values, result) result = new_call val[0], :*, argl(val[2]) result end def _reduce_211(val, _values, result) result = new_call val[0], :"/", argl(val[2]) result end def _reduce_212(val, _values, result) result = new_call val[0], :"%", argl(val[2]) result end def _reduce_213(val, _values, result) result = new_call val[0], :**, argl(val[2]) result end def _reduce_214(val, _values, result) result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") result end def _reduce_215(val, _values, result) result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") result end def _reduce_216(val, _values, result) result = new_call val[1], :"+@" result end def _reduce_217(val, _values, result) result = new_call val[1], :"-@" result end def _reduce_218(val, _values, result) result = new_call val[0], :"|", argl(val[2]) result end def _reduce_219(val, _values, result) result = new_call val[0], :"^", argl(val[2]) result end def _reduce_220(val, _values, result) result = new_call val[0], :"&", argl(val[2]) result end def _reduce_221(val, _values, result) result = new_call val[0], :"<=>", argl(val[2]) result end def _reduce_222(val, _values, result) result = new_call val[0], :">", argl(val[2]) result end def _reduce_223(val, _values, result) result = new_call val[0], :">=", argl(val[2]) result end def _reduce_224(val, _values, result) result = new_call val[0], :"<", argl(val[2]) result end def _reduce_225(val, _values, result) result = new_call val[0], :"<=", argl(val[2]) result end def _reduce_226(val, _values, result) result = new_call val[0], :"==", argl(val[2]) result end def _reduce_227(val, _values, result) result = new_call val[0], :"===", argl(val[2]) result end def _reduce_228(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) result end def _reduce_229(val, _values, result) result = new_match val[0], val[2] result end def _reduce_230(val, _values, result) result = s(:not, new_match(val[0], val[2])) result end def _reduce_231(val, _values, result) result = new_call val[1], :"!" result end def _reduce_232(val, _values, result) val[2] = value_expr val[2] result = new_call val[1], :"~" result end def _reduce_233(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) result end def _reduce_234(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) result end def _reduce_235(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_236(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_237(val, _values, result) result = s(:defined, val[2]) result end def _reduce_238(val, _values, result) result = s(:if, val[0], val[2], val[5]) result end # reduce 239 omitted def _reduce_240(val, _values, result) result = value_expr(val[0]) result end # reduce 241 omitted def _reduce_242(val, _values, result) result = val[0] result end def _reduce_243(val, _values, result) result = val[0] << s(:hash, *val[2].values) result end def _reduce_244(val, _values, result) result = s(:array, s(:hash, *val[0].values)) result end def _reduce_245(val, _values, result) result = val[1] result end # reduce 246 omitted # reduce 247 omitted def _reduce_248(val, _values, result) result = val[0] result end def _reduce_249(val, _values, result) result = val[0] result end def _reduce_250(val, _values, result) result = val[0] result end def _reduce_251(val, _values, result) result = val[0] << s(:hash, *val[2].sexp_body) # TODO: self.args result end def _reduce_252(val, _values, result) result = s(:hash, *val[0].values) result end def _reduce_253(val, _values, result) warning "parenthesize argument(s) for future version" result = s(:array, val[0]) result end def _reduce_254(val, _values, result) result = self.arg_blk_pass val[0], val[1] result end def _reduce_255(val, _values, result) result = s(:array, s(:hash, *val[0].values)) result = self.arg_blk_pass result, val[1] result end def _reduce_256(val, _values, result) result = val[0] << s(:hash, *val[2].values) result = self.arg_blk_pass result, val[3] result end # reduce 257 omitted def _reduce_258(val, _values, result) result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true result end def _reduce_259(val, _values, result) lexer.cmdarg.stack.replace val[0] result = val[1] result end def _reduce_260(val, _values, result) result = s(:block_pass, val[1]) result end def _reduce_261(val, _values, result) result = val[1] result end # reduce 262 omitted def _reduce_263(val, _values, result) result = s(:array, val[0]) result end def _reduce_264(val, _values, result) result = s(:array, s(:splat, val[1])) result end def _reduce_265(val, _values, result) result = self.list_append val[0], val[2] result end def _reduce_266(val, _values, result) result = self.list_append val[0], s(:splat, val[3]) result end def _reduce_267(val, _values, result) result = val[0] << val[2] result end def _reduce_268(val, _values, result) result = self.arg_concat val[0], val[3] result end def _reduce_269(val, _values, result) result = s(:splat, val[1]) result end # reduce 270 omitted # reduce 271 omitted # reduce 272 omitted # reduce 273 omitted # reduce 274 omitted # reduce 275 omitted # reduce 276 omitted # reduce 277 omitted def _reduce_278(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_279(val, _values, result) result = self.lexer.lineno result end def _reduce_280(val, _values, result) unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] result end def _reduce_281(val, _values, result) lexer.lex_state = :expr_endarg result end def _reduce_282(val, _values, result) warning "(...) interpreted as grouped expression" result = val[1] result end def _reduce_283(val, _values, result) result = val[1] || s(:nil) result.paren = true result end def _reduce_284(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end def _reduce_285(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_286(val, _values, result) result = val[1] || s(:array) result end def _reduce_287(val, _values, result) result = self.lexer.lineno result end def _reduce_288(val, _values, result) result = new_hash val result end def _reduce_289(val, _values, result) result = s(:return) result end def _reduce_290(val, _values, result) result = new_yield val[2] result end def _reduce_291(val, _values, result) result = new_yield result end def _reduce_292(val, _values, result) result = new_yield result end def _reduce_293(val, _values, result) result = s(:defined, val[3]) result end def _reduce_294(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_295(val, _values, result) raise "no3\non#{val.inspect}" result end def _reduce_296(val, _values, result) oper, iter = val[0], val[1] call = new_call nil, oper.to_sym iter.insert 1, call result = iter call.line = iter.line result end # reduce 297 omitted def _reduce_298(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter result end def _reduce_299(val, _values, result) result = val[1] # TODO: fix lineno result end def _reduce_300(val, _values, result) result = new_if val[1], val[3], val[4] result end def _reduce_301(val, _values, result) result = new_if val[1], val[4], val[3] result end def _reduce_302(val, _values, result) lexer.cond.push true result end def _reduce_303(val, _values, result) lexer.cond.pop result end def _reduce_304(val, _values, result) result = new_while val[5], val[2], true result end def _reduce_305(val, _values, result) lexer.cond.push true result end def _reduce_306(val, _values, result) lexer.cond.pop result end def _reduce_307(val, _values, result) result = new_until val[5], val[2], true result end def _reduce_308(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_309(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_310(val, _values, result) lexer.cond.push true result end def _reduce_311(val, _values, result) lexer.cond.pop result end def _reduce_312(val, _values, result) result = new_for val[4], val[1], val[7] result end def _reduce_313(val, _values, result) result = self.lexer.lineno result end def _reduce_314(val, _values, result) self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend result end def _reduce_315(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_316(val, _values, result) result = self.lexer.lineno result end def _reduce_317(val, _values, result) result = self.in_def self.in_def = false result end def _reduce_318(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend result end def _reduce_319(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_320(val, _values, result) result = self.lexer.lineno result end def _reduce_321(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend result end def _reduce_322(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_323(val, _values, result) result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend lexer.cmdarg.stack.replace [false] result end def _reduce_324(val, _values, result) in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body result end def _reduce_325(val, _values, result) self.comments.push self.lexer.comments lexer.lex_state = :expr_fname result end def _reduce_326(val, _values, result) self.in_single += 1 self.env.extend lexer.lex_state = :expr_end # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] result end def _reduce_327(val, _values, result) line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body result end def _reduce_328(val, _values, result) result = s(:break) result end def _reduce_329(val, _values, result) result = s(:next) result end def _reduce_330(val, _values, result) result = s(:redo) result end def _reduce_331(val, _values, result) result = s(:retry) result end def _reduce_332(val, _values, result) result = value_expr(val[0]) result end # reduce 333 omitted # reduce 334 omitted # reduce 335 omitted # reduce 336 omitted # reduce 337 omitted # reduce 338 omitted # reduce 339 omitted # reduce 340 omitted # reduce 341 omitted # reduce 342 omitted # reduce 343 omitted # reduce 344 omitted # reduce 345 omitted # reduce 346 omitted # reduce 347 omitted # reduce 348 omitted # reduce 349 omitted def _reduce_350(val, _values, result) result = s(:if, val[1], val[3], val[4]) result end # reduce 351 omitted def _reduce_352(val, _values, result) result = val[1] result end # reduce 353 omitted def _reduce_354(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end # reduce 355 omitted def _reduce_356(val, _values, result) result = val[1] result end def _reduce_357(val, _values, result) result = s(:array, val[0]) result end def _reduce_358(val, _values, result) result = list_append val[0], val[2] result end def _reduce_359(val, _values, result) args, = val result = block_var args result end def _reduce_360(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym result end def _reduce_361(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 result end def _reduce_362(val, _values, result) args, _, _ = val result = block_var args, :* result end def _reduce_363(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 result end def _reduce_364(val, _values, result) _, splat = val result = block_var :"*#{splat}" result end def _reduce_365(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args result end def _reduce_366(val, _values, result) result = block_var :* result end def _reduce_367(val, _values, result) _, _, args = val result = block_var :*, args result end def _reduce_368(val, _values, result) result = args val result end def _reduce_369(val, _values, result) result = args val result end def _reduce_370(val, _values, result) result = args val result end def _reduce_371(val, _values, result) result = args val result end def _reduce_372(val, _values, result) result = args val result end def _reduce_373(val, _values, result) result = args val result end def _reduce_374(val, _values, result) result = args val result end def _reduce_375(val, _values, result) result = args val result end def _reduce_376(val, _values, result) result = args val result end def _reduce_377(val, _values, result) result = args val result end def _reduce_378(val, _values, result) result = args val result end def _reduce_379(val, _values, result) result = args val result end def _reduce_380(val, _values, result) result = args val result end def _reduce_381(val, _values, result) result = args val result end def _reduce_382(val, _values, result) result = args val result end def _reduce_383(val, _values, result) result = 0 result end # reduce 384 omitted def _reduce_385(val, _values, result) result = args val result end def _reduce_386(val, _values, result) result = s(:args) self.lexer.command_start = true result end def _reduce_387(val, _values, result) result = args val result end # reduce 388 omitted def _reduce_389(val, _values, result) result = val[1] result end def _reduce_390(val, _values, result) result = args val result end def _reduce_391(val, _values, result) result = args val result end def _reduce_392(val, _values, result) result = s(:shadow, val[0].to_sym) result end # reduce 393 omitted def _reduce_394(val, _values, result) # TODO: dyna_push ? hrm result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest result end def _reduce_395(val, _values, result) lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body result end def _reduce_396(val, _values, result) result = args val result end def _reduce_397(val, _values, result) result = val[0] result = 0 if result == s(:args) result end def _reduce_398(val, _values, result) result = val[1] result end def _reduce_399(val, _values, result) result = val[1] result end def _reduce_400(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_401(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_402(val, _values, result) args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend result end def _reduce_403(val, _values, result) # TODO: # if (nd_type($1) == NODE_YIELD) { # compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] result end def _reduce_404(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_405(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_406(val, _values, result) result = self.lexer.lineno result end def _reduce_407(val, _values, result) result = new_call nil, val[0].to_sym, val[2] result end def _reduce_408(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_409(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_410(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_411(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_412(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_413(val, _values, result) result = new_super val[1] result end def _reduce_414(val, _values, result) result = s(:zsuper) result end def _reduce_415(val, _values, result) result = new_aref val result end def _reduce_416(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_417(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_418(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_419(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_420(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_421(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_422(val, _values, result) result = self.lexer.lineno result end def _reduce_423(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] result end # reduce 424 omitted # reduce 425 omitted def _reduce_426(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above result end def _reduce_427(val, _values, result) result = nil result end def _reduce_428(val, _values, result) result = s(:array, val[0]) result end # reduce 429 omitted # reduce 430 omitted def _reduce_431(val, _values, result) result = val[1] result end # reduce 432 omitted def _reduce_433(val, _values, result) _, body = val result = body || s(:nil) result end # reduce 434 omitted def _reduce_435(val, _values, result) result = s(:lit, val[0]) result end def _reduce_436(val, _values, result) result = s(:lit, val[0]) result end # reduce 437 omitted def _reduce_438(val, _values, result) val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] result end # reduce 439 omitted def _reduce_440(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_441(val, _values, result) result = val[1] result end def _reduce_442(val, _values, result) result = new_string val result end def _reduce_443(val, _values, result) result = new_xstring val[1] result end def _reduce_444(val, _values, result) result = new_regexp val result end def _reduce_445(val, _values, result) result = s(:array) result end def _reduce_446(val, _values, result) result = val[1] result end def _reduce_447(val, _values, result) result = new_word_list result end def _reduce_448(val, _values, result) result = val[0] << new_word_list_entry(val) result end # reduce 449 omitted def _reduce_450(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_451(val, _values, result) result = s(:array) result end def _reduce_452(val, _values, result) result = val[1] result end def _reduce_453(val, _values, result) result = new_qword_list result end def _reduce_454(val, _values, result) result = val[0] << new_qword_list_entry(val) result end def _reduce_455(val, _values, result) result = s(:str, "") result end def _reduce_456(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_457(val, _values, result) result = nil result end def _reduce_458(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_459(val, _values, result) result = nil result end def _reduce_460(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_461(val, _values, result) result = new_string val result end def _reduce_462(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg result end def _reduce_463(val, _values, result) lexer.lex_strterm = val[1] result = s(:evstr, val[2]) result end def _reduce_464(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_beg result end def _reduce_465(val, _values, result) _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else raise "unknown string body: #{stmt.inspect}" end result end def _reduce_466(val, _values, result) result = s(:gvar, val[0].to_sym) result end def _reduce_467(val, _values, result) result = s(:ivar, val[0].to_sym) result end def _reduce_468(val, _values, result) result = s(:cvar, val[0].to_sym) result end # reduce 469 omitted def _reduce_470(val, _values, result) lexer.lex_state = :expr_end result = val[1].to_sym result end def _reduce_471(val, _values, result) result = val[0].to_sym result end # reduce 472 omitted # reduce 473 omitted # reduce 474 omitted # reduce 475 omitted def _reduce_476(val, _values, result) lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.intern) else result = s(:dsym, "", result) end result end # reduce 477 omitted # reduce 478 omitted def _reduce_479(val, _values, result) result = -val[1] # TODO: pt_testcase result end def _reduce_480(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 481 omitted # reduce 482 omitted # reduce 483 omitted # reduce 484 omitted # reduce 485 omitted def _reduce_486(val, _values, result) result = s(:nil) result end def _reduce_487(val, _values, result) result = s(:self) result end def _reduce_488(val, _values, result) result = s(:true) result end def _reduce_489(val, _values, result) result = s(:false) result end def _reduce_490(val, _values, result) result = s(:str, self.file) result end def _reduce_491(val, _values, result) result = s(:lit, lexer.lineno) result end def _reduce_492(val, _values, result) result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end result end def _reduce_493(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_494(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_495(val, _values, result) result = self.assignable val[0] result end def _reduce_496(val, _values, result) result = self.assignable val[0] result end def _reduce_497(val, _values, result) result = s(:nth_ref, val[0]) result end def _reduce_498(val, _values, result) result = s(:back_ref, val[0]) result end def _reduce_499(val, _values, result) result = nil result end def _reduce_500(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_501(val, _values, result) result = val[2] result end def _reduce_502(val, _values, result) yyerrok result = nil result end def _reduce_503(val, _values, result) result = val[1] lexer.lex_state = :expr_beg self.lexer.command_start = true result end def _reduce_504(val, _values, result) result = val[0] result end def _reduce_505(val, _values, result) result = args val result end def _reduce_506(val, _values, result) result = args val result end def _reduce_507(val, _values, result) result = args val result end def _reduce_508(val, _values, result) result = args val result end def _reduce_509(val, _values, result) result = args val result end def _reduce_510(val, _values, result) result = args val result end def _reduce_511(val, _values, result) result = args val result end def _reduce_512(val, _values, result) result = args val result end def _reduce_513(val, _values, result) result = args val result end def _reduce_514(val, _values, result) result = args val result end def _reduce_515(val, _values, result) result = args val result end def _reduce_516(val, _values, result) result = args val result end def _reduce_517(val, _values, result) result = args val result end def _reduce_518(val, _values, result) result = args val result end def _reduce_519(val, _values, result) result = args val result end def _reduce_520(val, _values, result) yyerror "formal argument cannot be a constant" result end def _reduce_521(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_522(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_523(val, _values, result) yyerror "formal argument cannot be a class variable" result end # reduce 524 omitted def _reduce_525(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier result end # reduce 526 omitted def _reduce_527(val, _values, result) result = val[1] result end def _reduce_528(val, _values, result) case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else raise "Unknown f_arg type: #{val.inspect}" end result end def _reduce_529(val, _values, result) list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item result end def _reduce_530(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_531(val, _values, result) result = self.assignable val[0], val[2] result end def _reduce_532(val, _values, result) result = s(:block, val[0]) result end def _reduce_533(val, _values, result) result = val[0] result << val[2] result end def _reduce_534(val, _values, result) result = s(:block, val[0]) result end def _reduce_535(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 536 omitted # reduce 537 omitted def _reduce_538(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" result end def _reduce_539(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 540 omitted # reduce 541 omitted def _reduce_542(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym result end def _reduce_543(val, _values, result) result = val[1] result end def _reduce_544(val, _values, result) result = nil result end # reduce 545 omitted def _reduce_546(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_547(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit result end def _reduce_548(val, _values, result) result = s(:array) result end def _reduce_549(val, _values, result) result = val[0] result end # reduce 550 omitted def _reduce_551(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result end def _reduce_552(val, _values, result) result = s(:array, val[0], val[2]) result end def _reduce_553(val, _values, result) label, _ = val[0] # TODO: fix lineno? result = s(:array, s(:lit, label.to_sym), val.last) result end # reduce 554 omitted # reduce 555 omitted # reduce 556 omitted # reduce 557 omitted # reduce 558 omitted # reduce 559 omitted # reduce 560 omitted # reduce 561 omitted # reduce 562 omitted # reduce 563 omitted # reduce 564 omitted # reduce 565 omitted # reduce 566 omitted # reduce 567 omitted # reduce 568 omitted # reduce 569 omitted # reduce 570 omitted # reduce 571 omitted # reduce 572 omitted # reduce 573 omitted # reduce 574 omitted def _reduce_575(val, _values, result) yyerrok result end # reduce 576 omitted # reduce 577 omitted def _reduce_578(val, _values, result) yyerrok result end def _reduce_579(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class Ruby19Parser ruby_parser-3.11.0/lib/ruby23_parser.rb0000644000004100000410000077413413277753330020010 0ustar www-datawww-data# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.14 # from Racc grammer file "". # require 'racc/parser.rb' class Ruby23Parser < RubyParser::Parser require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ##### State transition tables begin ### clist = [ '-607,272,530,-101,-104,-98,272,-607,-607,-607,757,272,222,-607,-607', '-616,-607,94,95,-105,-84,83,223,-104,-507,-607,666,630,585,84,748,-507', '627,116,749,-70,-607,-607,115,-607,-607,-607,-607,-607,-96,-100,116', '826,223,591,223,115,-91,-92,-94,-103,-100,457,-99,-105,665,856,826,585', '-103,585,-98,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607', '-607,-607,-607,737,-604,-607,-607,-607,709,650,271,-604,629,-607,-99', '271,-607,626,96,97,271,-607,505,-607,-264,-607,-607,-607,-607,-607,-607', '-607,-89,-607,-607,-607,-106,503,756,-101,-104,-91,-92,-94,-101,-104', '-96,-504,-607,-607,-95,-93,-106,-607,-504,-504,-504,116,-102,-504,-504', '-504,115,-504,116,-607,-102,940,-105,115,585,-504,-91,-504,-504,-504', '-91,-92,-94,-91,-92,-94,-94,-504,-504,-90,-504,-504,-504,-504,-504,585', '-100,-263,-91,-92,-94,-100,-93,116,-103,116,-98,116,115,-103,115,-98', '115,-101,-106,500,-519,708,-504,-504,-504,-504,-504,-504,-504,-504,-504', '-504,-504,-504,-504,-504,-99,737,-504,-504,-504,-99,-504,-504,-603,737', '-504,887,-102,-504,-504,272,-504,791,-504,792,-504,772,-504,-504,-504', '-504,-504,-504,-504,771,-504,770,-504,219,220,888,-603,-93,-106,94,95', '-99,274,-106,-102,-504,-504,-504,-504,-102,-504,-601,-504,265,-105,-518', '116,-507,530,-105,266,115,-504,-504,-507,-507,-507,219,220,-507,-507', '-507,-93,-507,-101,-93,-103,116,-603,666,-418,-507,115,-507,-507,-507', '-92,-97,219,220,-93,490,-100,-507,-507,222,-507,-507,-507,-507,-507', '116,271,116,-507,890,115,714,115,116,611,-507,-98,665,115,-105,-601', '-93,96,97,-507,666,893,223,-507,-507,-507,-507,-507,-507,-507,-507,-507', '-507,-507,-507,-507,-507,-601,-518,-507,-507,-507,666,-507,-507,542', '223,-507,544,1010,-507,-507,611,-507,665,-507,223,-507,-600,-507,-507', '-507,-507,-507,-507,-507,265,-507,-507,-507,613,612,609,266,215,-519', '665,223,856,826,-89,1017,-507,-507,-507,-507,611,-507,116,-507,1015', '681,243,115,-607,-98,896,-510,898,-507,-507,-607,-607,-607,-510,570', '-607,-607,-607,542,-607,-504,541,613,612,631,573,-90,-504,-607,-607', '-607,-607,-600,240,219,220,-504,242,241,-607,-607,-99,-607,-607,-607', '-607,-607,565,216,562,561,560,542,563,-600,544,613,612,581,580,565,777', '562,561,560,767,563,900,-607,223,-607,-607,-607,-607,-607,-607,-607', '-607,-607,-607,-607,-607,-607,-607,217,-504,-607,-607,-607,215,793,-607', '574,902,-607,903,454,-607,-607,611,-607,459,-607,-91,-607,455,-607,-607', '-607,-607,-607,-607,-607,570,-607,-607,-607,542,-100,458,544,-607,611', '456,573,986,-97,611,-607,-607,-607,-607,-607,-603,-607,-289,-607,-607', '852,696,116,-106,-289,-289,-289,115,-607,-102,-289,-289,911,-289,-337', '-262,216,-607,915,581,580,-337,613,612,243,-290,219,220,215,917,-337', '769,-290,-289,-289,967,-289,-289,-289,-289,-289,-290,-289,918,753,613', '612,624,-607,-289,613,612,619,574,-604,644,240,643,-289,611,242,241', '616,223,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289', '-289,-289,215,-337,-289,-289,-289,714,649,594,921,116,-289,923,-290', '-289,115,216,592,925,-289,-94,-289,-92,-289,-289,-289,-289,-289,-289', '-289,-289,-289,215,-289,-290,-103,927,-101,927,523,223,-290,611,613', '612,-289,-289,-289,521,-95,-290,-289,-289,-289,-289,219,220,-289,-289', '-289,-514,-289,-517,-289,-104,933,216,-514,-509,-517,-513,-289,-289', '-289,409,-509,-516,-513,-517,411,410,-289,-289,-516,-289,-289,-289,-289', '-289,-504,740,-512,-516,-511,215,215,-504,216,-512,-290,-511,967,214', '613,612,614,581,580,219,220,753,212,-289,-289,-289,-289,-289,-289,-289', '-289,-289,-289,-289,-289,-289,-289,935,-517,-289,-289,-289,-515,794', '-289,591,937,-289,733,-515,-289,-289,-516,-289,611,-289,412,-289,407', '-289,-289,-289,-289,-289,-289,-289,391,-289,116,-289,216,216,731,115', '565,223,562,561,560,570,563,-289,-289,-289,-289,-289,388,-289,-289,-289', '573,385,947,-604,-281,948,223,-289,951,-289,-104,-281,-281,-281,-265', '730,-281,-281,-281,382,-281,215,568,729,618,613,612,609,533,721,-281', '-281,-281,581,580,215,719,455,717,961,-281,-281,751,-281,-281,-281,-281', '-281,358,715,968,753,969,714,-280,971,-289,972,711,223,964,-280,562', '561,560,505,563,574,705,622,-280,-281,-281,-281,-281,-281,-281,-281', '-281,-281,-281,-281,-281,-281,-281,702,216,-281,-281,-281,701,988,-281', '322,990,-281,991,625,-281,-281,216,-281,628,-281,995,-281,696,-281,-281', '-281,-281,-281,-281,-281,714,-281,1000,-281,565,-280,562,561,560,570', '563,119,120,121,122,123,-281,-281,-281,-281,573,-281,-426,-281,119,120', '121,122,123,-426,-426,-426,1002,-281,-426,-426,-426,565,-426,562,561', '560,568,563,1004,1006,1006,-426,-426,-426,535,879,880,581,580,881,110', '111,-426,-426,223,-426,-426,-426,-426,-426,565,1013,562,561,560,321', '563,262,635,723,1018,565,685,562,561,560,1019,563,726,927,927,574,927', '-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426', '1024,723,-426,-426,-426,-84,988,-426,223,274,-426,218,723,-426,-426', '-262,-426,637,-426,223,-426,726,-426,-426,-426,-426,-426,-426,-426,243', '-426,-426,-426,641,223,565,-604,562,561,560,-603,563,701,223,-609,-426', '-426,642,-426,243,-426,-609,-609,-609,211,243,-609,-609,-609,243,-609', '240,-426,243,988,242,241,238,239,-609,-609,-609,-609,723,1047,257,258', '1048,1049,1050,-609,-609,932,-609,-609,-609,-609,-609,1006,1006,1006', '240,223,246,210,242,241,238,239,209,927,244,565,245,562,561,560,988', '563,243,112,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609', '-609,-609,505,274,-609,-609,-609,539,243,-609,503,696,-609,223,531,-609', '-609,723,-609,653,-609,274,-609,527,-609,-609,-609,-609,-609,-609,-609', '1006,-609,-609,-609,565,274,562,561,560,570,563,119,120,121,122,123', '-609,-609,-609,-609,573,-609,-297,-609,119,120,121,122,123,-297,-297', '-297,696,-609,-297,-297,-297,262,-297,243,796,565,568,562,561,560,243', '563,-297,-297,274,826,3,581,580,257,258,223,-297,-297,223,-297,-297', '-297,-297,-297,964,277,562,561,560,240,563,246,223,242,241,238,239,723', '223,244,565,245,562,561,560,574,563,-297,-297,-297,-297,-297,-297,-297', '-297,-297,-297,-297,-297,-297,-297,545,243,-297,-297,-297,490,850,-297', '223,277,-297,826,860,-297,-297,524,-297,723,-297,223,-297,490,-297,-297', '-297,-297,-297,-297,-297,591,-297,401,-297,240,517,516,595,242,241,238', '239,778,596,223,-608,-297,-297,-69,-297,,-297,-608,-608,-608,,,-608', '-608,-608,243,-608,565,-297,562,561,560,,563,,-608,-608,-608,-608,,', '257,258,,,,-608,-608,,-608,-608,-608,-608,-608,,,,240,,246,,242,241', '238,239,723,,244,,245,,,,,,,,-608,-608,-608,-608,-608,-608,-608,-608', '-608,-608,-608,-608,-608,-608,,,-608,-608,-608,,,-608,,,-608,,,-608', '-608,,-608,,-608,,-608,,-608,-608,-608,-608,-608,-608,-608,,-608,-608', '-608,565,,562,561,560,570,563,,,,,,-608,-608,-608,-608,573,-608,-627', '-608,,,,,,-627,-627,-627,,-608,-627,-627,-627,,-627,243,,,568,,,,,-627', '-627,-627,,,,581,580,257,258,,-627,-627,,-627,-627,-627,-627,-627,,', ',,,240,,246,,242,241,238,239,,,244,,245,,,,574,,-627,-627,-627,-627', '-627,-627,-627,-627,-627,-627,-627,-627,-627,-627,,,-627,-627,-627,', ',-627,,274,-627,,,-627,-627,,-627,,-627,,-627,,-627,-627,-627,-627,-627', '-627,-627,,-627,-627,-627,,,,,,,,,,,,,-627,-627,,-627,,-627,297,72,73', '74,12,60,,,,66,67,-627,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,654,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', ',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,-239,,,65', ',,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,654,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', '251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240', ',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', '92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70', ',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,638,11', '48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243', '247,252,253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36', ',,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91', '83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74', '12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94', '95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,', '257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248', '244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96', '97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255', '256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241', '238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65', ',,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', '251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240', ',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', '92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70', ',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48', ',13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247', '252,253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61', '62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83', '85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', '258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', '23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', '297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', ',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', '88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', '259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', '47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', ',261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', '253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62', ',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', '86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60', ',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', ',22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', '258,,43,,,299,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', '23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', '297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', ',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', '88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', '259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', '47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', ',261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', '253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62', ',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', '86,87,89,,,,84,92,223,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', '258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', '23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', '297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', ',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', '88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', ',,255,256,,,,,,257,258,,43,,,299,,,61,62,,,63,,38,240,,246,47,242,241', '238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', '251,259,260,255,256,,-628,-628,,,257,258,,43,,,36,,,61,62,,,63,,38,240', ',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', '253,254,249,251,259,260,255,256,,-628,-628,,,257,258,,43,,,36,,,61,62', ',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,', '66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', ',,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,,,,257,258,,43,', ',36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,8,72,73,74', '12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,22,,,,,,11,48,10,13,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,,,,257', '258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', '23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297', '72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,', ',,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250', '248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628', '-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', ',,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259', ',255,256,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241', '238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,243,-628,-628,-628,-628', '249,251,,,-628,-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', '47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,8,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,-628,-628', '-628,-628,249,251,,,-628,-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38', '240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11', '48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243', ',,,,,,,,,,,,,,,257,258,,43,,,299,,243,61,62,,,63,,38,240,,246,47,242', '241,238,239,257,258,,23,,,,,91,83,85,86,87,89,,,240,84,92,,242,241,238', '239,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69', '71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,,,,,,,,,', ',,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239', ',,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297', '72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,', '47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290', '102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,', '63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', ',291,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', ',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', ',228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87', '89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,', ',70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,', '48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,', ',,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,', ',,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94', '95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47', ',,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,', ',96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290', '102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,', '63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', ',291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,', ',304,,,61,62,,,63,,303,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,', ',,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308', ',,234,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,320', ',,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,678,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,', ',,,978,,,234,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,,,47,,,,,', ',,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,116,,,,,115,65,,,81,88,90,,', '96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,352,,,36,,,61,62,,,63,', '38,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,', '96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,905,,,234,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', '290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62', ',,63,,,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', ',291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', '36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,401,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', ',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,417,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', ',228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87', '89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,', ',70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,', '48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,', ',,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,', ',,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,417,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', ',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,223,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', ',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,', '235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,,,47,,,,,,,,233', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', '105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', ',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,417', ',,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,535,,61,62', ',,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', ',32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', ',63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,', '310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99', '101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61', '62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', ',228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,', ',84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,', '68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,', ',,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46', '44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,284,,47,,,,,,,,233,', ',,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', '105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,284', ',47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88', '90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,', '310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99', '101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61', '62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,597,59', '100,99,598,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,599,,,234,', ',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,597,59', '100,99,598,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,599,,,234,', ',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,775,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,', ',,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', '65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', '99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288', ',,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,287', '85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,', ',66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,,,47,,,,,', ',,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', '47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286', ',284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', ',,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61', '62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,', '32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99', '101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62', ',,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,401,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', '76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,284,,47,,,,,,,,233,,,,,91,287', '85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,', ',66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,284,,47,,', ',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', ',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', ',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', '76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,905,,,234', ',,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', '106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', '105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', ',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', '47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', ',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', ',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', '76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', '106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', '105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', ',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', '47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', ',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', ',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', '76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91', '287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', '106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,', ',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286', ',284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,223,,,,,,65,,291', '81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,', ',,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,', '22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,', '45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,', ',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,234,,,61,62,,,63,,,,', ',,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,519,,,65,,,81,88,90,,,96', '97,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201,205,206', '185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190', ',,,,,171,178,169,170,166,167,168,127,129,398,397,128,,399,,,,,,,161', '162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,', ',,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,', ',,,,,,,,,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', '180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', '199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', ',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', '150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', ',,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203', '204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202', '197,367,366,368,365,172,191,190,,,,,,171,178,169,170,362,363,364,360', '129,100,99,361,,102,,,,,,,161,162,,157,139,140,141,148,145,147,,,142', '143,,,,163,164,149,150,,,,,,374,,,,,,,,154,153,,138,160,156,155,151', '152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187,177,200', '173,193,183,182,203,204,198,181,180,175,201,205,206,185,174,188,192', '194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,,171,178', '169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148', '145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156', '155,151,152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187', '177,200,173,193,183,182,203,204,198,181,180,175,201,205,206,185,174', '188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,', '171,178,169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138', '160,156,155,151,152,146,144,136,159,137,,,165,91,,,,,,,,,,92,,,,,,,', ',158,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201,205', '206,185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191', '190,,,,,,171,178,169,170,166,167,168,127,129,126,,128,,,,,,,,,161,162', ',157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,', ',,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,91,,,', ',,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', '180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', '199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', ',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', '150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', ',,165,91,,,,-627,,,,,,92,-627,-627,-627,,,-627,-627,-627,158,-627,,', ',,,,,,-627,-627,,,,,,,,,,-627,-627,,-627,-627,-627,-627,-627,,,,,,,', '488,431,,,489,,,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143', '-627,,,163,164,149,150,-627,,,,,274,-627,,,,,,,154,153,,138,160,156', '155,151,152,146,144,136,159,137,-627,-627,165,,,,,1042,438,,,1043,,', '-627,,,,,-627,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', '136,159,137,,,165,,,,,656,431,,,657,,,,,,,,,161,162,158,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', ',138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,1040,431,,,1041', ',,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164', '149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', '159,137,,,165,,,,,658,438,,,659,,,,,,,,,161,162,158,157,139,140,141', '148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153,,138', '160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560,570,563', '565,,562,561,560,570,563,,,573,,,,,158,,573,,,,,,,,,,,,,,,568,,,,,,', '568,,1012,438,581,580,1011,,,578,577,581,580,,,161,162,,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,574,,,274,,,,574,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,689,431,', ',690,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', '136,159,137,,,165,,,,,692,438,,,693,,,,,,,,,161,162,158,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', ',138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560,570', '563,,,,,,,,,,573,,,,,158,,,,,,,,,,,,,,,,,568,761,656,431,,,657,,,578', '577,581,580,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,,,,274,,,,574,,,,154,153,,138,160,156,155,151,152,146', '144,136,159,137,,,165,,,,,658,438,,,659,,,,,,,,,161,162,158,157,139', '140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560', '570,563,565,,562,561,560,570,563,,,573,,,,,158,,573,565,,562,561,560', '570,563,565,,562,561,560,570,563,568,,573,,,,,568,,573,,581,580,,,,', ',581,580,,,,565,568,562,561,560,570,563,,568,,,,581,580,,,573,578,577', '581,580,565,574,562,561,560,570,563,565,574,562,561,560,570,563,,,573', '568,,,,,,573,,574,578,577,581,580,,565,574,562,561,560,570,563,568,', ',,,,,568,,573,,581,580,,,,578,577,581,580,,,,,574,,,,,,,568,,,,,,,,', '578,577,581,580,,574,,427,431,,,428,574,,,,,,,,161,162,,157,139,140', '141,148,145,147,,,142,143,,,574,163,164,149,150,,,,,,274,,,,,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,434,438,', ',433,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', '136,159,137,,,165,,,,,743,431,,,744,,,,,,,,,161,162,158,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', ',138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,745,438,,,746', ',,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164', '149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', '159,137,,565,165,562,561,560,570,563,565,,562,561,560,570,563,,,573', ',,,,158,,573,,,,,565,,562,561,560,570,563,,,,568,761,,,,,573,568,,578', '577,581,580,,,,578,577,581,580,,,,,,,,,568,,,,,,,,,488,431,581,580,489', ',,,574,,,,,161,162,574,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,574,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146', '144,136,159,137,,,165,,,,,864,438,,,865,,,,,,,,,161,162,158,157,139', '140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560', '570,563,565,,562,561,560,570,563,,,573,,,,,158,,573,565,,562,561,560', '570,563,,,,,,,,568,551,573,,,,,568,,578,577,581,580,,,,578,577,581,580', ',,,565,568,562,561,560,570,563,,,,578,577,581,580,,,573,,,,,,574,,,', ',,,574,,,,,,,,,568,,,,,,,,574,578,577,581,580,,,,,,,,,,,,,,,,,,,,,,', ',,223,,,,,,,,574' ] racc_action_table = arr = ::Array.new(26642, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '434,313,322,1040,1043,349,64,434,434,434,603,669,22,434,434,61,434,318', '318,595,684,80,290,746,361,434,670,392,861,80,599,361,389,757,599,684', '434,434,757,434,434,434,434,434,322,862,871,993,22,993,61,871,821,689', '690,744,1055,229,350,322,670,732,732,914,1041,936,975,434,434,434,434', '434,434,434,434,434,434,434,434,434,434,587,1043,434,434,434,550,434', '313,746,392,434,976,64,434,389,318,318,669,434,285,434,774,434,434,434', '434,434,434,434,349,434,434,434,229,282,603,1040,1043,821,689,690,1040', '1043,595,98,434,434,746,434,979,434,98,98,98,603,1042,98,98,98,603,98', '861,434,434,861,1018,861,342,98,862,98,98,98,821,689,690,821,689,690', '744,98,98,350,98,98,98,98,98,343,1055,636,821,689,690,1055,692,914,1041', '936,975,587,914,1041,936,975,587,743,353,281,227,550,98,98,98,98,98', '98,98,98,98,98,98,98,98,98,976,588,98,98,98,976,98,98,1042,863,98,779', '745,98,98,29,98,656,98,657,98,632,98,98,98,98,98,98,98,630,98,627,98', '764,764,795,692,692,979,44,44,227,270,979,1042,98,98,98,98,1042,98,598', '98,370,1018,226,342,101,456,1018,370,342,98,98,101,101,101,451,451,101', '101,101,692,101,656,692,657,343,745,486,29,101,343,101,101,101,743,353', '699,699,692,267,795,101,101,235,101,101,101,101,101,588,29,945,598,797', '588,798,945,863,507,598,226,486,863,456,598,745,44,44,598,494,800,764', '101,101,101,101,101,101,101,101,101,101,101,101,101,101,598,41,101,101', '101,495,101,101,704,962,101,704,962,101,101,394,101,494,101,451,101', '597,101,101,101,101,101,101,101,27,101,598,101,507,507,507,27,977,42', '495,699,1026,1026,41,977,101,101,101,101,620,101,762,101,977,507,462', '762,658,41,801,367,802,101,101,658,658,658,367,711,658,658,658,334,658', '597,334,394,394,394,711,42,597,658,658,658,658,597,462,341,341,597,462', '462,658,658,42,658,658,658,658,658,932,977,932,932,932,335,932,597,335', '620,620,711,711,726,639,726,726,726,620,726,804,864,805,658,658,658', '658,658,658,658,658,658,658,658,658,658,658,18,597,658,658,658,225,658', '658,711,806,658,807,225,658,658,623,658,231,658,639,658,225,658,658', '658,658,658,658,658,890,658,658,658,548,639,230,548,864,386,228,890', '932,18,383,864,658,658,658,658,864,658,433,658,864,726,820,294,18,433', '433,433,294,658,658,433,433,824,433,49,827,225,864,828,890,890,49,623', '623,463,524,538,538,966,833,49,623,524,433,433,966,433,433,433,433,433', '524,865,834,966,386,386,386,864,865,383,383,383,890,865,428,463,427', '865,380,463,463,380,835,433,433,433,433,433,433,433,433,433,433,433', '433,433,433,351,49,433,433,433,836,433,351,840,346,433,841,524,433,346', '966,351,843,433,428,433,427,433,433,433,433,433,433,433,865,433,307', '433,749,428,844,427,846,307,849,749,378,380,380,659,433,433,307,433', '749,433,659,659,659,758,758,659,659,659,362,659,306,433,433,851,351', '362,366,306,363,659,659,659,126,366,305,363,306,126,126,659,659,305', '659,659,659,659,659,360,590,365,305,368,904,17,360,307,365,749,368,904', '17,378,378,378,714,714,20,20,904,17,659,659,659,659,659,659,659,659', '659,659,659,659,659,659,854,306,659,659,659,364,659,659,589,857,659', '584,364,659,659,305,659,376,659,207,659,124,659,659,659,659,659,659', '659,90,659,5,659,904,17,582,5,1050,867,1050,1050,1050,1050,1050,693', '659,659,659,659,89,659,693,659,1050,88,872,693,59,873,874,693,883,659', '659,59,59,59,884,579,59,59,59,87,59,324,1050,575,382,376,376,376,324', '567,59,59,59,1050,1050,601,558,324,557,901,59,59,601,59,59,59,59,59', '72,556,905,601,906,554,309,908,693,909,553,48,1010,309,1010,1010,1010', '549,1010,1050,546,385,309,59,59,59,59,59,59,59,59,59,59,59,59,59,59', '537,324,59,59,59,536,934,59,43,938,59,939,388,59,59,601,59,391,59,944', '59,528,59,59,59,59,59,59,59,952,59,955,59,1019,309,1019,1019,1019,1019', '1019,9,9,9,9,9,59,59,59,59,1019,59,30,59,296,296,296,296,296,30,30,30', '956,59,30,30,30,568,30,568,568,568,1019,568,957,958,960,30,30,30,525', '765,765,1019,1019,765,765,765,30,30,520,30,30,30,30,30,1024,970,1024', '1024,1024,40,1024,25,413,568,978,723,518,723,723,723,981,723,568,982', '983,1019,984,30,30,30,30,30,30,30,30,30,30,30,30,30,30,985,1024,30,30', '30,515,987,30,514,30,30,19,723,30,30,416,30,418,30,422,30,723,30,30', '30,30,30,30,30,481,30,30,30,425,497,850,1011,850,850,850,1012,850,1014', '496,439,30,30,426,30,467,30,439,439,439,16,466,439,439,439,472,439,481', '30,465,1025,481,481,481,481,439,439,439,439,850,1030,472,472,1031,1032', '1033,439,439,850,439,439,439,439,439,1034,1035,1036,472,1039,472,15', '472,472,472,472,13,1044,472,988,472,988,988,988,1045,988,464,3,439,439', '439,439,439,439,439,439,439,439,439,439,439,439,677,435,439,439,439', '332,326,439,675,686,439,688,323,439,439,988,439,443,439,691,439,319', '439,439,439,439,439,439,439,1057,439,439,439,1006,694,1006,1006,1006', '1006,1006,683,683,683,683,683,439,439,439,439,1006,439,31,439,513,513', '513,513,513,31,31,31,695,439,31,31,31,668,31,473,662,986,1006,986,986', '986,698,986,31,31,317,700,1,1006,1006,473,473,703,31,31,312,31,31,31', '31,31,902,311,902,902,902,473,902,473,710,473,473,473,473,986,660,473', '852,473,852,852,852,1006,852,31,31,31,31,31,31,31,31,31,31,31,31,31', '31,336,482,31,31,31,651,725,31,727,31,31,734,739,31,31,308,31,852,31', '742,31,645,31,31,31,31,31,31,31,347,31,348,31,482,302,301,352,482,482', '482,482,640,354,300,438,31,31,298,31,,31,438,438,438,,,438,438,438,474', '438,933,31,933,933,933,,933,,438,438,438,438,,,474,474,,,,438,438,,438', '438,438,438,438,,,,474,,474,,474,474,474,474,933,,474,,474,,,,,,,,438', '438,438,438,438,438,438,438,438,438,438,438,438,438,,,438,438,438,,', '438,,,438,,,438,438,,438,,438,,438,,438,438,438,438,438,438,438,,438', '438,438,1004,,1004,1004,1004,1004,1004,,,,,,438,438,438,438,1004,438', '429,438,,,,,,429,429,429,,438,429,429,429,,429,475,,,1004,,,,,429,429', '429,,,,1004,1004,475,475,,429,429,,429,429,429,429,429,,,,,,475,,475', ',475,475,475,475,,,475,,475,,,,1004,,429,429,429,429,429,429,429,429', '429,429,429,429,429,429,,,429,429,429,,,429,,429,429,,,429,429,,429', ',429,,429,,429,429,429,429,429,429,429,,429,429,429,,,,,,,,,,,,,429', '429,,429,,429,974,974,974,974,974,974,,,,974,974,429,,,974,,974,974', '974,974,974,974,974,,,,,,974,974,974,974,974,974,974,,,974,,,,,446,974', '974,,974,974,974,974,974,974,974,974,974,,974,974,974,,974,974,,974', '974,974,446,446,446,446,446,446,446,446,446,446,446,,446,446,,,446,446', ',974,,,974,,,974,974,,,974,,974,446,,446,974,446,446,446,446,446,446', '446,974,446,,,,974,974,974,974,974,974,,,,974,974,,446,,446,,,974,,', '974,974,974,,,974,974,234,234,234,234,234,234,,,,234,234,,,,234,,234', '234,234,234,234,234,234,,,,,,234,234,234,234,234,234,234,,,234,,,,,661', '234,234,,234,234,234,234,234,234,234,234,234,,234,234,234,,234,234,', '234,234,234,661,661,661,661,661,661,661,661,661,661,661,,661,661,,,661', '661,,234,,,234,,,234,234,,,234,,234,661,,661,234,661,661,661,661,661', '661,661,234,661,,,,234,234,234,234,234,234,,,,234,234,,661,,,,,234,', ',234,234,234,,,234,234,811,811,811,811,811,811,,,,811,811,,,,811,,811', '811,811,811,811,811,811,,,,,,811,811,811,811,811,811,811,,,811,,,,,421', '811,811,,811,811,811,811,811,811,811,811,811,,811,811,811,,811,811,', '811,811,811,421,421,421,421,421,421,421,421,421,421,421,,421,421,,,421', '421,,811,,,811,,,811,811,,,811,,811,421,,421,811,421,421,421,421,421', '421,421,811,421,,,,811,811,811,811,811,811,,,,811,811,,421,,,,,811,', ',811,811,811,,,811,811,209,209,209,209,209,209,,,,209,209,,,,209,,209', '209,209,209,209,209,209,,,,,,209,209,209,209,209,209,209,,,209,,,,,', '209,209,,209,209,209,209,209,209,209,209,209,,209,209,209,,209,209,', '209,209,209,776,776,776,776,776,776,776,776,776,776,776,,776,776,,,776', '776,,209,,,209,,,209,209,,,209,,209,776,,776,209,776,776,776,776,776', '776,776,209,776,,,,209,209,209,209,209,209,,,,209,209,,776,,,,,209,', ',209,209,209,,,209,209,941,941,941,941,941,941,,,,941,941,,,,941,,941', '941,941,941,941,941,941,,,,,,941,941,941,941,941,941,941,,,941,,,,,', '941,941,,941,941,941,941,941,941,941,941,941,,941,941,941,,941,941,', '941,941,941,788,788,788,788,788,788,788,788,788,788,788,,788,788,,,788', '788,,941,,,941,,,941,941,,,941,,941,788,,788,941,788,788,788,788,788', '788,788,941,788,,,,941,941,941,941,941,941,,,,941,941,,788,,,,,941,', ',941,941,941,,,941,941,709,709,709,709,709,709,,,,709,709,,,,709,,709', '709,709,709,709,709,709,,,,,,709,709,709,709,709,709,709,,,709,,,,,', '709,709,,709,709,709,709,709,709,709,709,709,,709,709,709,,709,709,', '709,709,709,781,781,781,781,781,781,781,781,781,781,781,,781,781,,,781', '781,,709,,,709,,,709,709,,,709,,709,781,,781,709,781,781,781,781,781', '781,781,709,781,,,,709,709,709,709,709,709,,,,709,709,,781,,,,,709,', ',709,709,709,,,709,709,859,859,859,859,859,859,,,,859,859,,,,859,,859', '859,859,859,859,859,859,,,,,,859,859,859,859,859,859,859,,,859,,,,,', '859,859,,859,859,859,859,859,859,859,859,859,,859,859,859,,859,859,', '859,859,859,889,889,889,889,889,889,889,889,889,889,889,,889,889,,,889', '889,,859,,,859,,,859,859,,,859,,859,889,,889,859,889,889,889,889,889', '889,889,859,889,,,,859,859,859,859,859,859,,,,859,859,,889,,,,,859,', ',859,859,859,,,859,859,858,858,858,858,858,858,,,,858,858,,,,858,,858', '858,858,858,858,858,858,,,,,,858,858,858,858,858,858,858,,,858,,,,,', '858,858,,858,858,858,858,858,858,858,858,858,,858,858,858,,858,858,', '858,858,858,24,24,24,24,24,24,24,24,24,24,24,,24,24,,,24,24,,858,,,858', ',,858,858,,,858,,858,24,,24,858,24,24,24,24,24,24,24,858,24,,,,858,858', '858,858,858,858,,,,858,858,,24,,,,,858,,,858,858,858,,,858,858,998,998', '998,998,998,998,,,,998,998,,,,998,,998,998,998,998,998,998,998,,,,,', '998,998,998,998,998,998,998,,,998,,,,,,998,998,,998,998,998,998,998', '998,998,998,998,,998,998,998,,998,998,,998,998,998,697,697,697,697,697', '697,697,697,697,697,697,,697,697,,,697,697,,998,,,998,,,998,998,,,998', ',998,697,,697,998,697,697,697,697,697,697,697,998,697,,,,998,998,998', '998,998,998,,,,998,998,,697,,,,,998,,,998,998,998,,,998,998,997,997', '997,997,997,997,,,,997,997,,,,997,,997,997,997,997,997,997,997,,,,,', '997,997,997,997,997,997,997,,,997,,,,,,997,997,,997,997,997,997,997', '997,997,997,997,,997,997,997,,997,997,,997,997,997,886,886,886,886,886', '886,886,886,886,886,886,,886,886,,,886,886,,997,,,997,,,997,997,,,997', ',997,886,,886,997,886,886,886,886,886,886,886,997,886,,,,997,997,997', '997,997,997,,,,997,997,,886,,,,,997,,,997,997,997,,,997,997,994,994', '994,994,994,994,,,,994,994,,,,994,,994,994,994,994,994,994,994,,,,,', '994,994,994,994,994,994,994,,,994,,,,,,994,994,,994,994,994,994,994', '994,994,994,994,,994,994,994,,994,994,,994,994,994,783,783,783,783,783', '783,783,783,783,783,783,,783,783,,,783,783,,994,,,994,,,994,994,,,994', ',994,783,,783,994,783,783,783,783,783,783,783,994,783,,,,994,994,994', '994,994,994,,,,994,994,,783,,,,,994,,,994,994,994,,,994,994,304,304', '304,304,304,304,,,,304,304,,,,304,,304,304,304,304,304,304,304,,,,,', '304,304,304,304,304,304,304,,,304,,,,,,304,304,,304,304,304,304,304', '304,304,304,304,,304,304,304,,304,304,,304,304,304,441,441,441,441,441', '441,441,441,441,441,441,,441,441,,,441,441,,304,,,304,,,304,304,,,304', ',304,441,,441,304,441,441,441,441,441,441,441,304,441,,,,304,304,304', '304,304,304,,,,304,304,,441,,,,,304,,,304,304,304,,,304,304,911,911', '911,911,911,911,,,,911,911,,,,911,,911,911,911,911,911,911,911,,,,,', '911,911,911,911,911,911,911,,,911,,,,,,911,911,,911,911,911,911,911', '911,911,911,911,,911,911,911,,911,911,,911,911,911,786,786,786,786,786', '786,786,786,786,786,786,,786,786,,,786,786,,911,,,911,,,911,911,,,911', ',911,786,,786,911,786,786,786,786,786,786,786,911,786,,,,911,911,911', '911,911,911,,,,911,911,,786,,,,,911,,,911,911,911,,,911,911,826,826', '826,826,826,826,,,,826,826,,,,826,,826,826,826,826,826,826,826,,,,,', '826,826,826,826,826,826,826,,,826,,,,,,826,826,,826,826,826,826,826', '826,826,826,826,,826,826,826,,826,826,,826,826,826,279,279,279,279,279', '279,279,279,279,279,279,,279,279,,,279,279,,826,,,826,,,826,826,,,826', ',826,279,,279,826,279,279,279,279,279,279,279,826,279,,,,826,826,826', '826,826,826,,,,826,826,,279,,,,,826,,,826,826,826,,,826,826,815,815', '815,815,815,815,,,,815,815,,,,815,,815,815,815,815,815,815,815,,,,,', '815,815,815,815,815,815,815,,,815,,,,,,815,815,,815,815,815,815,815', '815,815,815,815,,815,815,815,,815,815,,815,815,815,485,485,485,485,485', '485,485,485,485,485,485,,485,485,,,485,485,,815,,,815,,,815,815,,,815', ',815,485,,485,815,485,485,485,485,485,485,485,815,485,,,,815,815,815', '815,815,815,,,,815,815,485,485,,,,,815,,,815,815,815,,,815,815,816,816', '816,816,816,816,,,,816,816,,,,816,,816,816,816,816,816,816,816,,,,,', '816,816,816,816,816,816,816,,,816,,,,,,816,816,,816,816,816,816,816', '816,816,816,816,,816,816,816,,816,816,,816,816,816,790,790,790,790,790', '790,790,790,790,790,790,,790,790,,,790,790,,816,,,816,,,816,816,,,816', ',816,790,,790,816,790,790,790,790,790,790,790,816,790,,,,816,816,816', '816,816,816,,,,816,816,,790,,,,,816,,,816,816,816,,,816,816,907,907', '907,907,907,907,,,,907,907,,,,907,,907,907,907,907,907,907,907,,,,,', '907,907,907,907,907,907,907,,,907,,,,,,907,907,,907,907,907,907,907', '907,907,907,907,,907,907,907,,907,907,,907,907,907,534,534,534,534,534', '534,534,534,534,534,534,,534,534,,,534,534,,907,,,907,,,907,907,,,907', ',907,534,,534,907,534,534,534,534,534,534,534,907,534,,,,907,907,907', '907,907,907,,,,907,907,,534,,,,,907,,,907,907,907,,,907,907,299,299', '299,299,299,299,,,,299,299,,,,299,,299,299,299,299,299,299,299,,,,,', '299,299,299,299,299,299,299,,,299,,,,,,299,299,,299,299,299,299,299', '299,299,299,299,,299,299,299,,299,299,,299,299,299,483,483,483,483,483', '483,483,,,483,483,,,,,,483,483,,299,,,299,,,299,299,,,299,,299,483,', '483,299,483,483,483,483,483,483,483,299,483,,,,299,299,299,299,299,299', ',,,299,299,,,,,,,299,,,299,299,299,,,299,299,989,989,989,989,989,989', ',,,989,989,,,,989,,989,989,989,989,989,989,989,,,,,,989,989,989,989', '989,989,989,,,989,,,,,,989,989,,989,989,989,989,989,989,989,989,989', ',989,989,989,,989,989,,989,989,989,460,460,460,460,460,460,460,460,460', '460,460,,460,460,,,460,460,,989,,,989,,,989,989,,,989,,989,460,,460', '989,460,460,460,460,460,460,460,989,460,,,,989,989,989,989,989,989,', ',,989,989,,,,,,,989,,,989,989,989,,,989,989,329,329,329,329,329,329', ',,,329,329,,,,329,,329,329,329,329,329,329,329,,,,,,329,329,329,329', '329,329,329,,,329,,,,,,329,329,,329,329,329,329,329,329,329,329,329', ',329,329,329,,329,329,,329,329,329,461,461,461,461,461,461,461,461,461', '461,461,,461,461,,,461,461,,329,,,329,,,329,329,,,329,,329,461,,461', '329,461,461,461,461,461,461,461,329,461,,,,329,329,329,329,329,329,', ',,329,329,,,,,,,329,,,329,329,329,,,329,329,708,708,708,708,708,708', ',,,708,708,,,,708,,708,708,708,708,708,708,708,,,,,,708,708,708,708', '708,708,708,,,708,,,,,,708,708,,708,708,708,708,708,708,708,708,708', ',708,708,708,,708,708,,708,708,708,477,477,477,477,477,477,477,,,477', '477,,,,,,477,477,,708,,,708,,,708,708,,,708,,708,477,,477,708,477,477', '477,477,477,477,477,708,477,,,,708,708,708,708,708,708,,,,708,708,,', ',,,,708,,,708,708,708,,,708,708,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2,2', '2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2,,2', '2,2,478,478,478,478,478,478,478,,,478,478,,,,,,478,478,,2,,,2,,,2,2', ',,2,,2,478,,478,2,478,478,478,478,478,478,478,2,478,,,,2,2,2,2,2,2,', ',,2,2,,,,,,,2,,,2,2,2,,,2,2,759,759,759,759,759,759,,,,759,759,,,,759', ',759,759,759,759,759,759,759,,,,,,759,759,759,759,759,759,759,,,759', ',,,,,759,759,,759,759,759,759,759,759,759,759,759,,759,759,759,,759', '759,,759,759,759,479,479,479,479,479,479,479,,,479,479,,,,,,479,479', ',759,,,759,,,759,759,,,759,,759,479,,479,759,479,479,479,479,479,479', '479,759,479,,,,759,759,759,759,759,759,,,,759,759,,,,,,,759,,,759,759', '759,,,759,759,868,868,868,868,868,868,,,,868,868,,,,868,,868,868,868', '868,868,868,868,,,,,,868,868,868,868,868,868,868,,,868,,,,,,868,868', ',868,868,868,868,868,868,868,868,868,,868,868,868,,868,868,,868,868', '868,480,480,480,480,480,480,480,,,480,480,,,,,,480,480,,868,,,868,,', '868,868,,,868,,868,480,,480,868,480,480,480,480,480,480,480,868,480', ',,,868,868,868,868,868,868,,,,868,868,,,,,,,868,,,868,868,868,,,868', '868,760,760,760,760,760,760,,,,760,760,,,,760,,760,760,760,760,760,760', '760,,,,,,760,760,760,760,760,760,760,,,760,,,,,,760,760,,760,760,760', '760,760,760,760,760,760,,760,760,760,,760,760,,760,760,760,484,484,484', '484,484,484,484,484,,484,484,,,,,,484,484,,760,,,760,,,760,760,,,760', ',760,484,,484,760,484,484,484,484,484,484,484,760,484,,,,760,760,760', '760,760,760,,,,760,760,,,,,,,760,,,760,760,760,,,760,760,766,766,766', '766,766,766,,,,766,766,,,,766,,766,766,766,766,766,766,766,,,,,,766', '766,766,766,766,766,766,,,766,,,,,,766,766,,766,766,766,766,766,766', '766,766,766,,766,766,766,,766,766,,766,766,766,471,471,471,471,471,471', '471,,,471,471,,,,,,471,471,,766,,,766,,,766,766,,,766,,766,471,,471', '766,471,471,471,471,471,471,471,766,471,,,,766,766,766,766,766,766,', ',,766,766,,,,,,,766,,,766,766,766,,,766,766,407,407,407,407,407,407', ',,,407,407,,,,407,,407,407,407,407,407,407,407,,,,,,407,407,407,407', '407,407,407,,,407,,,,,,407,407,407,407,407,407,407,407,407,407,407,407', ',407,407,407,,407,407,,407,407,407,476,476,476,476,476,476,476,,,476', '476,,,,,,476,476,,407,,,407,,,407,407,,,407,,407,476,,476,407,476,476', '476,476,476,476,476,407,476,,,,407,407,407,407,407,407,,,,407,407,,', ',,,,407,,,407,407,407,,,407,407,36,36,36,36,36,36,,,,36,36,,,,36,,36', '36,36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,36,36,,36,36,36', '36,36,36,36,36,36,,36,36,36,,36,36,,36,36,36,468,,,,,,,,,,,,,,,,468', '468,,36,,,36,,470,36,36,,,36,,36,468,,468,36,468,468,468,468,470,470', ',36,,,,,36,36,36,36,36,36,,,470,36,36,,470,470,470,470,,36,,,36,36,36', ',,36,36,583,583,583,583,583,583,,,,583,583,,,,583,,583,583,583,583,583', '583,583,,,,,,583,583,583,583,583,583,583,,,583,,,,,,583,583,,583,583', '583,583,583,583,583,583,583,,583,583,583,,583,583,,583,583,583,469,', ',,,,,,,,,,,,,,469,469,,583,,,583,,,583,583,,,583,,583,469,,469,583,469', '469,469,469,,,,583,,,,,583,583,583,583,583,583,,,,583,583,,,,,,,583', ',,583,583,583,,,583,583,586,586,586,586,586,586,,,,586,586,,,,586,,586', '586,586,586,586,586,586,,,,,,586,586,586,586,586,586,586,,,586,,,,,', '586,586,,586,586,586,586,586,586,586,586,586,,586,586,586,,586,586,', '586,586,586,,,,,,,,,,,,,,,,,,,,586,,,586,,,586,586,,,586,,586,,,,586', ',,,,,,,586,,,,,586,586,586,586,586,586,,,,586,586,,,,,,,586,,,586,586', '586,,,586,586,257,257,257,,257,,,,257,257,,,,257,,257,257,257,257,257', '257,257,,,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257,257,257', '257,257,257,257,257,,257,257,257,,257,257,,257,257,257,,,,,,,,,,,,,', ',,,,,,257,,,257,,,257,257,,,257,,,,,,257,,,,,,,,257,,,,,257,257,257', '257,257,257,,,,257,257,,,,,,,257,,,257,257,257,,,257,257,455,455,455', ',455,,,,455,455,,,,455,,455,455,455,455,455,455,455,,,,,,455,455,455', '455,455,455,455,,,455,,,,,,,455,,,455,455,455,455,455,455,455,455,455', '455,455,455,,455,455,,455,455,455,,,,,,,,,,,,,,,,,,,,455,,,455,,,455', '455,,,455,,455,,455,,455,,,,,,,,455,,,,,455,455,455,455,455,455,,,,455', '455,,,,,,,455,,455,455,455,455,,,455,455,8,8,8,8,8,,,,8,8,,,,8,,8,8', '8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8', ',8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,', '8,8,8,8,8,8,,,,8,8,,,,,,,8,,,8,8,8,,,8,8,1015,1015,1015,,1015,,,,1015', '1015,,,,1015,,1015,1015,1015,1015,1015,1015,1015,,,,,,1015,1015,1015', '1015,1015,1015,1015,,,1015,,,,,,,1015,,,1015,1015,1015,1015,1015,1015', '1015,1015,1015,1015,1015,1015,,1015,1015,,1015,1015,1015,,,,,,,,,,,', ',,,,,,,,1015,,,1015,,,1015,1015,,,1015,,1015,,1015,,1015,,,,,,,,1015', ',,,,1015,1015,1015,1015,1015,1015,,,,1015,1015,,,,,,,1015,,1015,1015', '1015,1015,,,1015,1015,23,23,23,,23,,,,23,23,,,,23,,23,23,23,23,23,23', '23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,,23,23,23,23,23,23,23,23', ',23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,,,23,,,23,23,,,23,', ',,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23,23,,,,,,,23,,,23,23,23', ',,23,23,32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32,32,32,,,,,,32,32', '32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32,32,32,', '32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,,32,,32', ',,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32,32,32,32,,,32', '32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33,33,33', '33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33,,33,33', ',33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33,,,,,,', ',33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33,33,,,33,33,34', '34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34', '34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34,,34,34', '34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,,,,,,34,,,', ',34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,,,34,34,37,37,37,', '37,,,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,', '37,,,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,', ',,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37,37', '37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,,38', ',38,38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38,38', '38,38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,,38', ',,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,,,38', ',,38,38,38,,,38,38,940,940,940,,940,,,,940,940,,,,940,,940,940,940,940', '940,940,940,,,,,,940,940,940,940,940,940,940,,,940,,,,,,,940,,,940,940', '940,940,940,940,940,940,,940,940,940,,940,940,,940,940,940,,,,,,,,,', ',,,,,,,,,,940,,,940,,,940,940,,,940,,940,,,,940,,,,,,,,940,,,,,940,940', '940,940,940,940,,,,940,940,,,,,,,940,,,940,940,940,,,940,940,915,915', '915,,915,,,,915,915,,,,915,,915,915,915,915,915,915,915,,,,,,915,915', '915,915,915,915,915,,,915,,,,,,,915,,,915,915,915,915,915,915,915,915', ',915,915,915,,915,915,,,,915,,,,,,,,,,,,,,,,,,,,915,,,915,,,915,915', ',,915,,,,,,,,,,,,,,,,,,,915,915,915,915,915,915,,,,915,915,,,,,,,915', ',,915,915,915,,,915,915,45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45', '45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45', '45,,45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45', ',,,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45', ',,45,45,46,46,46,,46,,,,46,46,,,,46,,46,46,46,46,46,46,46,,,,,,46,46', '46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46', '46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,', '46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,,,46,46,47,47', '47,,47,,,,47,47,,,,47,,47,47,47,47,47,47,47,,,,,,47,47,47,47,47,47,47', ',,47,,,,,,,47,,,47,47,47,47,47,47,47,47,,47,47,47,,47,47,,47,47,47,', ',,,,,,,,,,,,,,,,,,47,,,47,,,47,47,,,47,,,,,,47,,,,,,,,47,,,,,47,47,47', '47,47,47,,,,47,47,,,,,,,47,,,47,47,47,,,47,47,62,62,62,,62,,,,62,62', ',,,62,,62,62,62,62,62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,,62', ',,62,62,62,62,62,62,62,62,62,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,', ',,,,,,62,,,62,,,62,62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62', ',,,62,62,,,,,,,62,,62,62,62,62,,,62,62,66,66,66,,66,,,,66,66,,,,66,', '66,66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,,66,,,66,66', '66,66,66,66,66,66,,66,66,66,,66,66,,66,66,66,,,,,,,,,,,,,,,,,,,,66,', ',66,,,66,66,,,66,,,,,,66,,,,,,,,66,,,,,66,66,66,66,66,66,,,,66,66,,', ',,,,66,,,66,66,66,,,66,66,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67', '67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67', '67,,67,67,67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67', ',,,,,67,,,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67', ',,67,67,70,70,70,,70,,,,70,70,,,,70,,70,70,70,70,70,70,70,,,,,,70,70', '70,70,70,70,70,,,70,,,,,,,70,,,70,70,70,70,70,70,70,70,,70,70,70,,70', '70,,70,70,70,,,,,,,,,,,,,,,,,,,,70,,,70,,,70,70,,,70,,,,,,70,,,,,,,', '70,,,,,70,70,70,70,70,70,,,,70,70,70,,,,,70,70,,,70,70,70,,,70,70,71', '71,71,,71,,,,71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71', '71,,,71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,,,71,,', ',,,,,,,,,,,,,,,,,71,,,71,,,71,71,,,71,,71,,,,,,,,,,,,,,,,,71,71,71,71', '71,71,,,,71,71,,,,,,,71,,,71,71,71,,,71,71,903,903,903,,903,,,,903,903', ',,,903,,903,903,903,903,903,903,903,,,,,,903,903,903,903,903,903,903', ',,903,,,,,,,903,,,903,903,903,903,903,903,903,903,,903,903,903,,903', '903,,,,903,,,,,,,,,,,,,,,,,,,,903,,,903,,,903,903,,,903,,,,,,,,,,,,', ',,,,,,903,903,903,903,903,903,,,,903,903,,,,,,,903,,,903,903,903,,,903', '903,888,888,888,,888,,,,888,888,,,,888,,888,888,888,888,888,888,888', ',,,,,888,888,888,888,888,888,888,,,888,,,,,,,888,,,888,888,888,888,888', '888,888,888,,888,888,888,,888,888,,888,888,888,,,,,,,,,,,,,,,,,,,,888', ',,888,,,888,888,,,888,,,,,,888,,,,,,,,888,,,,,888,888,888,888,888,888', ',,,888,888,,,,,,,888,,,888,888,888,,,888,888,887,887,887,,887,,,,887', '887,,,,887,,887,887,887,887,887,887,887,,,,,,887,887,887,887,887,887', '887,,,887,,,,,,,887,,,887,887,887,887,887,887,887,887,887,887,887,887', ',887,887,,887,887,887,,,,,,,,,,,,,,,,,,,,887,,,887,,,887,887,,,887,', ',,887,,887,,,,,,,,887,,,,,887,887,887,887,887,887,,,,887,887,,,,,,,887', ',887,887,887,887,,,887,887,869,869,869,,869,,,,869,869,,,,869,,869,869', '869,869,869,869,869,,,,,,869,869,869,869,869,869,869,,,869,,,,,,,869', ',,869,869,869,869,869,869,869,869,,869,869,869,,869,869,,869,869,869', ',,,,,,,,,,,,,,,,,,,869,,,869,,,869,869,,,869,,,,,,869,,,,,,,,869,,,', ',869,869,869,869,869,869,,,,869,869,,,,,,,869,,,869,869,869,,,869,869', '114,114,114,114,114,,,,114,114,,,,114,,114,114,114,114,114,114,114,', ',,,,114,114,114,114,114,114,114,,,114,,,,,,114,114,114,114,114,114,114', '114,114,114,114,114,,114,114,114,,114,114,,114,114,114,,,,,,,,,,,,,', ',,,,,,114,,,114,,,114,114,,,114,,114,,,,114,,,,,,,,114,,,,,114,114,114', '114,114,114,,,,114,114,,,,,,114,114,,,114,114,114,,,114,114,119,119', '119,,119,,,,119,119,,,,119,,119,119,119,119,119,119,119,,,,,,119,119', '119,119,119,119,119,,,119,,,,,,,119,,,119,119,119,119,119,119,119,119', ',119,119,119,,119,119,,119,119,119,,,,,,,,,,,,,,,,,,,,119,,,119,,,119', '119,,,119,,,,,,119,,,,,,,,119,,,,,119,119,119,119,119,119,,,,119,119', ',,,,,,119,,,119,119,119,,,119,119,120,120,120,,120,,,,120,120,,,,120', ',120,120,120,120,120,120,120,,,,,,120,120,120,120,120,120,120,,,120', ',,,,,,120,,,120,120,120,120,120,120,120,120,,120,120,120,,120,120,,120', '120,120,,,,,,,,,,,,,,,,,,,,120,,,120,,,120,120,,,120,,,,,,120,,,,,,', ',120,,,,,120,120,120,120,120,120,,,,120,120,,,,,,,120,,,120,120,120', ',,120,120,121,121,121,,121,,,,121,121,,,,121,,121,121,121,121,121,121', '121,,,,,,121,121,121,121,121,121,121,,,121,,,,,,,121,,,121,121,121,121', '121,121,121,121,,121,121,121,,121,121,,121,121,121,,,,,,,,,,,,,,,,,', ',,121,,,121,,,121,121,,,121,,,,,,121,,,,,,,,121,,,,,121,121,121,121', '121,121,,,,121,121,,,,,,,121,,,121,121,121,,,121,121,122,122,122,,122', ',,,122,122,,,,122,,122,122,122,122,122,122,122,,,,,,122,122,122,122', '122,122,122,,,122,,,,,,,122,,,122,122,122,122,122,122,122,122,,122,122', '122,,122,122,,122,122,122,,,,,,,,,,,,,,,,,,,,122,,,122,,,122,122,,,122', ',,,,,122,,,,,,,,122,,,,,122,122,122,122,122,122,,,,122,122,,,,,,,122', ',,122,122,122,,,122,122,123,123,123,123,123,,,,123,123,,,,123,,123,123', '123,123,123,123,123,,,,,,123,123,123,123,123,123,123,,,123,,,,,,123', '123,,123,123,123,123,123,123,123,123,123,,123,123,123,,123,123,,123', '123,123,,,,,,,,,,,,,,,,,,,,123,,,123,,,123,123,,,123,,123,,,,123,,,', ',,,,123,,,,,123,123,123,123,123,123,,,,123,123,,,,,,,123,,,123,123,123', ',,123,123,210,210,210,,210,,,,210,210,,,,210,,210,210,210,210,210,210', '210,,,,,,210,210,210,210,210,210,210,,,210,,,,,,,210,,,210,210,210,210', '210,210,210,210,,210,210,210,,210,210,,210,210,210,,,,,,,,,,,,,,,,,', ',,210,,,210,,,210,210,,,210,,210,,,,210,,,,,,,,210,,,,,210,210,210,210', '210,210,,,,210,210,,,,,,,210,,,210,210,210,,,210,210,211,211,211,,211', ',,,211,211,,,,211,,211,211,211,211,211,211,211,,,,,,211,211,211,211', '211,211,211,,,211,,,,,,,211,,,211,211,211,211,211,211,211,211,,211,211', '211,,211,211,,211,211,211,,,,,,,,,,,,,,,,,,,,211,,,211,,,211,211,,,211', ',,,,,211,,,,,,,,211,,,,,211,211,211,211,211,211,,,,211,211,,,,,,,211', ',,211,211,211,,,211,211,212,212,212,,212,,,,212,212,,,,212,,212,212', '212,212,212,212,212,,,,,,212,212,212,212,212,212,212,,,212,,,,,,,212', ',,212,212,212,212,212,212,212,212,212,212,212,212,,212,212,,212,212', '212,,,,,,,,,,,,,,,,,,,,212,,,212,,,212,212,,,212,,212,,212,,212,,,,', ',,,212,,,,,212,212,212,212,212,212,,,,212,212,,,,,,,212,,212,212,212', '212,,,212,212,217,217,217,,217,,,,217,217,,,,217,,217,217,217,217,217', '217,217,,,,,,217,217,217,217,217,217,217,,,217,,,,,,,217,,,217,217,217', '217,217,217,217,217,,217,217,217,,217,217,,217,217,217,,,,,,,,,,,,,', ',,,,,,217,,,217,,,217,217,,,217,,,,,,217,,,,,,,,217,,,,,217,217,217', '217,217,217,,,,217,217,,,,,,,217,,,217,217,217,,,217,217,218,218,218', ',218,,,,218,218,,,,218,,218,218,218,218,218,218,218,,,,,,218,218,218', '218,218,218,218,,,218,,,,,,,218,,,218,218,218,218,218,218,218,218,,218', '218,218,,218,218,,218,218,218,,,,,,,,,,,,,,,,,,,,218,,,218,,,218,218', ',,218,,218,,,,218,,,,,,,,218,,,,,218,218,218,218,218,218,,,,218,218', ',,,,,,218,,,218,218,218,,,218,218,219,219,219,,219,,,,219,219,,,,219', ',219,219,219,219,219,219,219,,,,,,219,219,219,219,219,219,219,,,219', ',,,,,,219,,,219,219,219,219,219,219,219,219,,219,219,219,,219,219,,219', '219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,219,,,219,,,,,,219,,,,,,', ',219,,,,,219,219,219,219,219,219,,,,219,219,,,,,,,219,,,219,219,219', ',,219,219,220,220,220,,220,,,,220,220,,,,220,,220,220,220,220,220,220', '220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220,,,220,220,220,220', '220,220,220,220,,220,220,220,,220,220,,220,220,220,,,,,,,,,,,,,,,,,', ',,220,,,220,,,220,220,,,220,,,,,,220,,,,,,,,220,,,,,220,220,220,220', '220,220,,,,220,220,,,,,,,220,,,220,220,220,,,220,220,221,221,221,,221', ',,,221,221,,,,221,,221,221,221,221,221,221,221,,,,,,221,221,221,221', '221,221,221,,,221,,,,,,,221,,,221,221,221,221,221,221,221,221,,221,221', '221,,221,221,,221,221,221,,,,,,,,,,,,,,,,,,,,221,,,221,,,221,221,,,221', ',,,,,221,,,,,,,,221,,,,,221,221,221,221,221,221,,,,221,221,,,,,,,221', ',,221,221,221,,,221,221,222,222,222,,222,,,,222,222,,,,222,,222,222', '222,222,222,222,222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,,222', ',,222,222,222,222,222,222,222,222,,222,222,222,,222,222,,222,222,222', ',,,,,,,,,,,,,,,,,,,222,,,222,,,222,222,,,222,,,,,,222,,,,,,,,222,,,', ',222,222,222,222,222,222,,,,222,222,222,,,,,,222,,,222,222,222,,,222', '222,856,856,856,,856,,,,856,856,,,,856,,856,856,856,856,856,856,856', ',,,,,856,856,856,856,856,856,856,,,856,,,,,,,856,,,856,856,856,856,856', '856,856,856,,856,856,856,,856,856,,856,856,856,,,,,,,,,,,,,,,,,,,,856', ',,856,,,856,856,,,856,,,,,,856,,,,,,,,856,,,,,856,856,856,856,856,856', ',,,856,856,,,,,,,856,,,856,856,856,,,856,856,741,741,741,,741,,,,741', '741,,,,741,,741,741,741,741,741,741,741,,,,,,741,741,741,741,741,741', '741,,,741,,,,,,,741,,,741,741,741,741,741,741,741,741,,741,741,741,', '741,741,,741,741,741,,,,,,,,,,,,,,,,,,,,741,,,741,,,741,741,,,741,,741', ',,,741,,,,,,,,741,,,,,741,741,741,741,741,741,,,,741,741,,,,,,,741,', ',741,741,741,,,741,741,721,721,721,,721,,,,721,721,,,,721,,721,721,721', '721,721,721,721,,,,,,721,721,721,721,721,721,721,,,721,,,,,,,721,,,721', '721,721,721,721,721,721,721,,721,721,721,,721,721,,721,721,721,,,,,', ',,,,,,,,,,,,,,721,,,721,,,721,721,,,721,,,,,,721,,,,,,,,721,,,,,721', '721,721,721,721,721,,,,721,721,,,,,,,721,,,721,721,721,,,721,721,701', '701,701,,701,,,,701,701,,,,701,,701,701,701,701,701,701,701,,,,,,701', '701,701,701,701,701,701,,,701,,,,,,,701,,,701,701,701,701,701,701,701', '701,,701,701,701,,701,701,,701,701,701,,,,,,,,,,,,,,,,,,,,701,,,701', ',,701,701,,,701,,701,,,,701,,,,,,,,701,,,,,701,701,701,701,701,701,', ',,701,701,,,,,,,701,,,701,701,701,,,701,701,696,696,696,,696,,,,696', '696,,,,696,,696,696,696,696,696,696,696,,,,,,696,696,696,696,696,696', '696,,,696,,,,,,,696,,,696,696,696,696,696,696,696,696,,696,696,696,', '696,696,,,,696,,,,,,,,,,,,,,,,,,,,696,,,696,,,696,696,,,696,,,,,,,,', ',,,,,,,,,,696,696,696,696,696,696,,,,696,696,,,,,,,696,,,696,696,696', ',,696,696,320,320,320,,320,,,,320,320,,,,320,,320,320,320,320,320,320', '320,,,,,,320,320,320,320,320,320,320,,,320,,,,,,,320,,,320,320,320,320', '320,320,320,320,,320,320,320,,320,320,,,,320,,,,,,,,,,,,,,,,,,,,320', ',,320,,,320,320,,,320,,,,,,,,,,,,,,,,,,,320,320,320,320,320,320,,,,320', '320,,,,,,,320,,,320,320,320,,,320,320,685,685,685,,685,,,,685,685,,', ',685,,685,685,685,685,685,685,685,,,,,,685,685,685,685,685,685,685,', ',685,,,,,,,685,,,685,685,685,685,685,685,685,685,,685,685,685,,685,685', ',,,685,,,,,,,,,,,,,,,,,,,,685,,,685,,,685,685,,,685,,,,,,,,,,,,,,,,', ',,685,685,685,685,685,685,,,,685,685,,,,,,,685,,,685,685,685,,,685,685', '681,681,681,,681,,,,681,681,,,,681,,681,681,681,681,681,681,681,,,,', ',681,681,681,681,681,681,681,,,681,,,,,,,681,,,681,681,681,681,681,681', '681,681,,681,681,681,,681,681,,681,681,681,,,,,,,,,,,,,,,,,,,,681,,', '681,,,681,681,,,681,,,,,,681,,,,,,,,681,,,,,681,681,681,681,681,681', ',,,681,681,,,,,,,681,,,681,681,681,,,681,681,328,328,328,,328,,,,328', '328,,,,328,,328,328,328,328,328,328,328,,,,,,328,328,328,328,328,328', '328,,,328,,,,,,,328,,,328,328,328,328,328,328,328,328,,328,328,328,', '328,328,,328,328,328,,,,,,,,,,,,,,,,,,,,328,,,328,328,,328,328,,,328', ',,,,,328,,,,,,,,328,,,,,328,328,328,328,328,328,,,,328,328,,,,,,,328', ',,328,328,328,,,328,328,331,331,331,,331,,,,331,331,,,,331,,331,331', '331,331,331,331,331,,,,,,331,331,331,331,331,331,331,,,331,,,,,,,331', ',,331,331,331,331,331,331,331,331,,331,331,331,,331,331,,331,331,331', ',,,,,,,,,,,,,,,,,,,331,,,331,,,331,331,,,331,,,,,,331,,,,,,,,331,,,', ',331,331,331,331,331,331,,,,331,331,,,,,,,331,,,331,331,331,,,331,331', '678,678,678,,678,,,,678,678,,,,678,,678,678,678,678,678,678,678,,,,', ',678,678,678,678,678,678,678,,,678,,,,,,,678,,,678,678,678,678,678,678', '678,678,,678,678,678,,678,678,,678,678,678,,,,,,,,,,,,,,,,,,,,678,,', '678,,,678,678,,,678,,,,,,678,,,,,,,,678,,,,,678,678,678,678,678,678', ',,,678,678,,,,,,,678,,,678,678,678,,,678,678,654,654,654,,654,,,,654', '654,,,,654,,654,654,654,654,654,654,654,,,,,,654,654,654,654,654,654', '654,,,654,,,,,,,654,,,654,654,654,654,654,654,654,654,,654,654,654,', '654,654,,654,654,654,,,,,,,,,,,,,,,,,,,,654,,,654,,,654,654,,,654,,', ',,,654,,,,,,,,654,,,,,654,654,654,654,654,654,,,,654,654,,,,,,,654,', ',654,654,654,,,654,654,337,337,337,,337,,,,337,337,,,,337,,337,337,337', '337,337,337,337,,,,,,337,337,337,337,337,337,337,,,337,,,,,,,337,,,337', '337,337,337,337,337,337,337,337,337,337,337,,337,337,,337,337,337,,', ',,,,,,,,,,,,,,,,,337,,,337,,,337,337,,,337,,,,,,337,,,,,,,,337,,,,,337', '337,337,337,337,337,,,,337,337,,,,,,,337,,337,337,337,337,,,337,337', '653,653,653,,653,,,,653,653,,,,653,,653,653,653,653,653,653,653,,,,', ',653,653,653,653,653,653,653,,,653,,,,,,,653,,,653,653,653,653,653,653', '653,653,,653,653,653,,653,653,,653,653,653,,,,,,,,,,,,,,,,,,,,653,,', '653,,,653,653,,,653,,,,,,653,,,,,,,,653,,,,,653,653,653,653,653,653', ',,,653,653,,,,,,,653,,,653,653,653,,,653,653,650,650,650,,650,,,,650', '650,,,,650,,650,650,650,650,650,650,650,,,,,,650,650,650,650,650,650', '650,,,650,,,,,,,650,,,650,650,650,650,650,650,650,650,,650,650,650,', '650,650,,650,650,650,,,,,,,,,,,,,,,,,,,,650,,,650,,,650,650,,,650,,', ',,,650,,,,,,,,650,,,,,650,650,650,650,650,650,,,,650,650,,,,,,,650,', ',650,650,650,,,650,650,344,344,344,,344,,,,344,344,,,,344,,344,344,344', '344,344,344,344,,,,,,344,344,344,344,344,344,344,,,344,,,,,,,344,,,344', '344,344,344,344,344,344,344,,344,344,344,,344,344,,344,344,344,,,,,', ',,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,,,,,344,,,,,,,,344,,,,,344', '344,344,344,344,344,,,,344,344,,,,,,,344,,,344,344,344,,,344,344,345', '345,345,,345,,,,345,345,,,,345,,345,345,345,345,345,345,345,,,,,,345', '345,345,345,345,345,345,,,345,,,,,,,345,,,345,345,345,345,345,345,345', '345,,345,345,345,,345,345,,345,345,345,,,,,,,,,,,,,,,,,,,,345,,,345', ',,345,345,,,345,,,,,,345,,,,,,,,345,,,,,345,345,345,345,345,345,,,,345', '345,,,,,,,345,,,345,345,345,,,345,345,649,649,649,,649,,,,649,649,,', ',649,,649,649,649,649,649,649,649,,,,,,649,649,649,649,649,649,649,', ',649,,,,,,,649,,,649,649,649,649,649,649,649,649,,649,649,649,,649,649', ',649,649,649,,,,,,,,,,,,,,,,,,,,649,,,649,,,649,649,,,649,,,,,,649,', ',,,,,,649,,,,,649,649,649,649,649,649,,,,649,649,,,,,,,649,,,649,649', '649,,,649,649,644,644,644,,644,,,,644,644,,,,644,,644,644,644,644,644', '644,644,,,,,,644,644,644,644,644,644,644,,,644,,,,,,,644,,,644,644,644', '644,644,644,644,644,,644,644,644,,644,644,,644,644,644,,,,,,,,,,,,,', ',,,,,,644,,,644,,,644,644,,,644,,,,,,644,,,,,,,,644,,,,,644,644,644', '644,644,644,,,,644,644,,,,,,,644,,,644,644,644,,,644,644,643,643,643', ',643,,,,643,643,,,,643,,643,643,643,643,643,643,643,,,,,,643,643,643', '643,643,643,643,,,643,,,,,,,643,,,643,643,643,643,643,643,643,643,,643', '643,643,,643,643,,643,643,643,,,,,,,,,,,,,,,,,,,,643,,,643,,,643,643', ',,643,,,,,,643,,,,,,,,643,,,,,643,643,643,643,643,643,,,,643,643,,,', ',,,643,,,643,643,643,,,643,643,642,642,642,,642,,,,642,642,,,,642,,642', '642,642,642,642,642,642,,,,,,642,642,642,642,642,642,642,,,642,,,,,', ',642,,,642,642,642,642,642,642,642,642,642,642,642,642,,642,642,,642', '642,642,,,,,,,,,,,,,,,,,,,,642,,,642,,,642,642,,,642,,,,642,,642,,,', ',,,,642,,,,,642,642,642,642,642,642,,,,642,642,,,,,,,642,,642,642,642', '642,,,642,642,641,641,641,,641,,,,641,641,,,,641,,641,641,641,641,641', '641,641,,,,,,641,641,641,641,641,641,641,,,641,,,,,,,641,,,641,641,641', '641,641,641,641,641,641,641,641,641,,641,641,,641,641,641,,,,,,,,,,', ',,,,,,,,,641,,,641,,,641,641,,,641,,641,,641,,641,,,,,,,,641,,,,,641', '641,641,641,641,641,,,,641,641,,,,,,,641,,641,641,641,641,,,641,641', '638,638,638,,638,,,,638,638,,,,638,,638,638,638,638,638,638,638,,,,', ',638,638,638,638,638,638,638,,,638,,,,,,,638,,,638,638,638,638,638,638', '638,638,,638,638,638,,638,638,,638,638,638,,,,,,,,,,,,,,,,,,,,638,,', '638,,,638,638,,,638,,,,,,638,,,,,,,,638,,,,,638,638,638,638,638,638', ',,,638,638,,,,,,,638,,,638,638,638,,,638,638,357,357,357,,357,,,,357', '357,,,,357,,357,357,357,357,357,357,357,,,,,,357,357,357,357,357,357', '357,,,357,,,,,,,357,,,357,357,357,357,357,357,357,357,,357,357,357,', '357,357,,,,357,,,,,,,,,,,,,,,,,,,,357,,,357,,,357,357,,,357,,,,,,,,', ',,,,,,,,,,357,357,357,357,357,357,,,,357,357,,,,,,,357,,,357,357,357', ',,357,357,359,359,359,,359,,,,359,359,,,,359,,359,359,359,359,359,359', '359,,,,,,359,359,359,359,359,359,359,,,359,,,,,,,359,,,359,359,359,359', '359,359,359,359,,359,359,359,,359,359,,,,359,,,,,,,,,,,,,,,,,,,,359', ',,359,,,359,359,,,359,,,,,,,,,,,,,,,,,,,359,359,359,359,359,359,,,,359', '359,,,,,,,359,,,359,359,359,,,359,359,637,637,637,,637,,,,637,637,,', ',637,,637,637,637,637,637,637,637,,,,,,637,637,637,637,637,637,637,', ',637,,,,,,,637,,,637,637,637,637,637,637,637,637,,637,637,637,,637,637', ',637,637,637,,,,,,,,,,,,,,,,,,,,637,,,637,,,637,637,,,637,,637,,,,637', ',,,,,,,637,,,,,637,637,637,637,637,637,,,,637,637,,,,,,,637,,,637,637', '637,,,637,637,608,608,608,,608,,,,608,608,,,,608,,608,608,608,608,608', '608,608,,,,,,608,608,608,608,608,608,608,,,608,,,,,,,608,,,608,608,608', '608,608,608,608,608,,608,608,608,,608,608,,608,608,608,,,,,,,,,,,,,', ',,,,,,608,,,608,,,608,608,,,608,,,,,,608,,,,,,,,608,,,,,608,608,608', '608,608,608,,,,608,608,,,,,,,608,,,608,608,608,,,608,608,604,604,604', ',604,,,,604,604,,,,604,,604,604,604,604,604,604,604,,,,,,604,604,604', '604,604,604,604,,,604,,,,,,,604,,,604,604,604,604,604,604,604,604,,604', '604,604,,604,604,,604,604,604,,,,,,,,,,,,,,,,,,,,604,,,604,,,604,604', ',,604,,,,,,604,,,,,,,,604,,,,,604,604,604,604,604,604,,,,604,604,,,', ',,,604,,,604,604,604,,,604,604,592,592,592,,592,,,,592,592,,,,592,,592', '592,592,592,592,592,592,,,,,,592,592,592,592,592,592,592,,,592,,,,,', ',592,,,592,592,592,592,592,592,592,592,592,592,592,592,,592,592,,592', '592,592,,,,,,,,,,,,,,,,,,,,592,,,592,,,592,592,,,592,,592,,592,,592', ',,,,,,,592,,,,,592,592,592,592,592,592,,,,592,592,,,,,,,592,,592,592', '592,592,,,592,592,571,571,571,,571,,,,571,571,,,,571,,571,571,571,571', '571,571,571,,,,,,571,571,571,571,571,571,571,,,571,,,,,,,571,,,571,571', '571,571,571,571,571,571,,571,571,571,,571,571,,571,571,571,,,,,,,,,', ',,,,,,,,,,571,,,571,,,571,571,,,571,,,,,,571,,,,,,,,571,,,,,571,571', '571,571,571,571,,,,571,571,,,,,,,571,,,571,571,571,,,571,571,544,544', '544,,544,,,,544,544,,,,544,,544,544,544,544,544,544,544,,,,,,544,544', '544,544,544,544,544,,,544,,,,,,,544,,,544,544,544,544,544,544,544,544', '544,544,544,544,,544,544,,544,544,544,,,,,,,,,,,,,,,,,,,,544,,,544,', ',544,544,,,544,,,,,,544,,,,,,,,544,,,,,544,544,544,544,544,544,,,,544', '544,,,,,,,544,,544,544,544,544,,,544,544,541,541,541,,541,,,,541,541', ',,,541,,541,541,541,541,541,541,541,,,,,,541,541,541,541,541,541,541', ',,541,,,,,,,541,,,541,541,541,541,541,541,541,541,541,541,541,541,,541', '541,,541,541,541,,,,,,,,,,,,,,,,,,,,541,,,541,,,541,541,,,541,,541,', ',,541,,,,,,,,541,,,,,541,541,541,541,541,541,,,,541,541,,,,,,,541,,541', '541,541,541,,,541,541,535,535,535,,535,,,,535,535,,,,535,,535,535,535', '535,535,535,535,,,,,,535,535,535,535,535,535,535,,,535,,,,,,,535,,,535', '535,535,535,535,535,535,535,,535,535,535,,535,535,,535,535,535,,,,,', ',,,,,,,,,,,,,,535,,,535,,,535,535,,,535,,,,,,535,,,,,,,,535,,,,,535', '535,535,535,535,535,,,,535,535,,,,,,,535,,,535,535,535,,,535,535,531', '531,531,,531,,,,531,531,,,,531,,531,531,531,531,531,531,531,,,,,,531', '531,531,531,531,531,531,,,531,,,,,,,531,,,531,531,531,531,531,531,531', '531,,531,531,531,,531,531,,531,531,531,,,,,,,,,,,,,,,,,,,,531,,,531', ',,531,531,,,531,,,,,,531,,,,,,,,531,,,,,531,531,531,531,531,531,,,,531', '531,,,,,,,531,,,531,531,531,,,531,531,530,530,530,,530,,,,530,530,,', ',530,,530,530,530,530,530,530,530,,,,,,530,530,530,530,530,530,530,', ',530,,,,,,,530,,,530,530,530,530,530,530,530,530,,530,530,530,,530,530', ',530,530,530,,,,,,,,,,,,,,,,,,,,530,,,530,,,530,530,,,530,,,,,,530,', ',,,,,,530,,,,,530,530,530,530,530,530,,,,530,530,,,,,,,530,,,530,530', '530,,,530,530,527,527,527,,527,,,,527,527,,,,527,,527,527,527,527,527', '527,527,,,,,,527,527,527,527,527,527,527,,,527,,,,,,,527,,,527,527,527', '527,527,527,527,527,,527,527,527,,527,527,,,,527,,,,,,,,,,,,,,,,,,,', '527,,,527,,,527,527,,,527,,,,,,,,,,,,,,,,,,,527,527,527,527,527,527', ',,,527,527,,,,,,,527,,,527,527,527,,,527,527,521,521,521,,521,,,,521', '521,,,,521,,521,521,521,521,521,521,521,,,,,,521,521,521,521,521,521', '521,,,521,,,,,,,521,,,521,521,521,521,521,521,521,521,521,521,521,521', ',521,521,,521,521,521,,,,,,,,,,,,,,,,,,,,521,,,521,,,521,521,,,521,', '521,,521,,521,,,,,,,,521,,,,,521,521,521,521,521,521,,,,521,521,,,,', ',,521,,521,521,521,521,,,521,521,519,519,519,,519,,,,519,519,,,,519', ',519,519,519,519,519,519,519,,,,,,519,519,519,519,519,519,519,,,519', ',,,,,,519,,,519,519,519,519,519,519,519,519,,519,519,519,,519,519,,', ',519,,,,,,,,,,,,,,,,,,,,519,,,519,,,519,519,,,519,,,,,,,,,,,,,,,,,,', '519,519,519,519,519,519,,,,519,519,,,,,,,519,,,519,519,519,,,519,519', '512,512,512,512,512,,,,512,512,,,,512,,512,512,512,512,512,512,512,', ',,,,512,512,512,512,512,512,512,,,512,,,,,,512,512,,512,512,512,512', '512,512,512,512,512,,512,512,512,,512,512,,512,512,512,,,,,,,,,,,,,', ',,,,,,512,,,512,,,512,512,,,512,,512,,,,512,,,,,,,,512,,,,,512,512,512', '512,512,512,,,,512,512,,,,,,512,512,,,512,512,512,,,512,512,417,417', '417,,417,,,,417,417,,,,417,,417,417,417,417,417,417,417,,,,,,417,417', '417,417,417,417,417,,,417,,,,,,,417,,,417,417,417,417,417,417,417,417', ',417,417,417,,417,417,,417,417,417,,,,,,,,,,,,,,,,,,,,417,,,417,,,417', '417,,,417,,,,,,417,,,,,,,,417,,,,,417,417,417,417,417,417,,,,417,417', ',,,,,,417,,,417,417,417,,,417,417,509,509,509,,509,,,,509,509,,,,509', ',509,509,509,509,509,509,509,,,,,,509,509,509,509,509,509,509,,,509', ',,,,,,509,,,509,509,509,509,509,509,509,509,,509,509,509,,509,509,,509', '509,509,,,,,,,,,,,,,,,,,,,,509,,,509,,,509,509,,,509,,,,,,509,,,,,,', ',509,,,,,509,509,509,509,509,509,,,,509,509,,,,,,,509,,,509,509,509', ',,509,509,505,505,505,,505,,,,505,505,,,,505,,505,505,505,505,505,505', '505,,,,,,505,505,505,505,505,505,505,,,505,,,,,,,505,,,505,505,505,505', '505,505,505,505,,505,505,505,,505,505,,505,505,505,,,,,,,,,,,,,,,,,', ',,505,,,505,,,505,505,,,505,,,,,,505,,,,,,,,505,,,,,505,505,505,505', '505,505,,,,505,505,,,,,,,505,,,505,505,505,,,505,505,503,503,503,,503', ',,,503,503,,,,503,,503,503,503,503,503,503,503,,,,,,503,503,503,503', '503,503,503,,,503,,,,,,,503,,,503,503,503,503,503,503,503,503,503,503', '503,503,,503,503,,503,503,503,,,,,,,,,,,,,,,,,,,,503,,,503,,,503,503', ',,503,,,,503,,503,,,,,,,,503,,,,,503,503,503,503,503,503,,,,503,503', ',,,,,,503,,503,503,503,503,,,503,503,500,500,500,,500,,,,500,500,,,', '500,,500,500,500,500,500,500,500,,,,,,500,500,500,500,500,500,500,,', '500,,,,,,,500,,,500,500,500,500,500,500,500,500,500,500,500,500,,500', '500,,500,500,500,,,,,,,,,,,,,,,,,,,,500,,,500,,,500,500,,,500,,500,', '500,,500,,,,,,,,500,,,,,500,500,500,500,500,500,,,,500,500,,,,,,,500', ',500,500,500,500,,,500,500,459,459,459,,459,,,,459,459,,,,459,,459,459', '459,459,459,459,459,,,,,,459,459,459,459,459,459,459,,,459,,,,,,,459', ',,459,459,459,459,459,459,459,459,,459,459,459,,459,459,,459,459,459', ',,,,,,,,,,,,,,,,,,,459,,,459,,,459,459,,,459,,,,,,459,,,,,,,,459,,,', ',459,459,459,459,459,459,,,,459,459,,,,,,,459,,,459,459,459,,,459,459', '458,458,458,,458,,,,458,458,,,,458,,458,458,458,458,458,458,458,,,,', ',458,458,458,458,458,458,458,,,458,,,,,,,458,,,458,458,458,458,458,458', '458,458,,458,458,458,,458,458,,458,458,458,,,,,,,,,,,,,,,,,,,,458,,', '458,,,458,458,,,458,,,,,,458,,,,,,,,458,,,,,458,458,458,458,458,458', ',,,458,458,,,,,,,458,,,458,458,458,,,458,458,457,457,457,,457,,,,457', '457,,,,457,,457,457,457,457,457,457,457,,,,,,457,457,457,457,457,457', '457,,,457,,,,,,,457,,,457,457,457,457,457,457,457,457,,457,457,457,', '457,457,,457,457,457,,,,,,,,,,,,,,,,,,,,457,,,457,,,457,457,,,457,,', ',,,457,,,,,,,,457,,,,,457,457,457,457,457,457,,,,457,457,,,,,,,457,', ',457,457,457,,,457,457,808,808,808,,808,,,,808,808,,,,808,,808,808,808', '808,808,808,808,,,,,,808,808,808,808,808,808,808,,,808,,,,,,,808,,,808', '808,808,808,808,808,808,808,,808,808,808,,808,808,,,,808,,,,,,,,,,,', ',,,,,,,,808,,,808,,,808,808,,,808,,,,,,,,,,,,,,,,,,,808,808,808,808', '808,808,,,,808,808,,,,,,,808,,,808,808,808,,,808,808,233,233,233,,233', ',,,233,233,,,,233,,233,233,233,233,233,233,233,,,,,,233,233,233,233', '233,233,233,,,233,,,,,,,233,,,233,233,233,233,233,233,233,233,,233,233', '233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,,,233,233,,,233', ',,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233,233,,,,,,,233', ',,233,233,233,,,233,233,796,796,796,,796,,,,796,796,,,,796,,796,796', '796,796,796,796,796,,,,,,796,796,796,796,796,796,796,,,796,,,,,,,796', ',,796,796,796,796,796,796,796,796,,796,796,796,,796,796,,796,796,796', ',,,,,,,,,,,,,,,,,,,796,,,796,,,796,796,,,796,,,,,,796,,,,,,,,796,,,', ',796,796,796,796,796,796,,,,796,796,,,,,,,796,,,796,796,796,,,796,796', '236,236,236,,236,,,,236,236,,,,236,,236,236,236,236,236,236,236,,,,', ',236,236,236,236,236,236,236,,,236,,,,,,,236,,,236,236,236,236,236,236', '236,236,,236,236,236,,236,236,,236,236,236,,,,,,,,,,,,,,,,,,,,236,,', '236,,,236,236,,,236,,,,,,236,,,,,,,,236,,,,,236,236,236,236,236,236', ',,,236,236,,,,,,,236,,,236,236,236,,,236,236,237,237,237,,237,,,,237', '237,,,,237,,237,237,237,237,237,237,237,,,,,,237,237,237,237,237,237', '237,,,237,,,,,,,237,,,237,237,237,237,237,237,237,237,,237,237,237,', '237,237,,237,237,237,,,,,,,,,,,,,,,,,,,,237,,,237,,,237,237,,,237,,', ',,,237,,,,,,,,237,,,,,237,237,237,237,237,237,,,,237,237,,,,,,,237,', ',237,237,237,,,237,237,238,238,238,,238,,,,238,238,,,,238,,238,238,238', '238,238,238,238,,,,,,238,238,238,238,238,238,238,,,238,,,,,,,238,,,238', '238,238,238,238,238,238,238,,238,238,238,,238,238,,238,238,238,,,,,', ',,,,,,,,,,,,,,238,,,238,,,238,238,,,238,,,,,,238,,,,,,,,238,,,,,238', '238,238,238,238,238,,,,238,238,,,,,,,238,,,238,238,238,,,238,238,239', '239,239,,239,,,,239,239,,,,239,,239,239,239,239,239,239,239,,,,,,239', '239,239,239,239,239,239,,,239,,,,,,,239,,,239,239,239,239,239,239,239', '239,,239,239,239,,239,239,,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239', ',,239,239,,,239,,,,,,239,,,,,,,,239,,,,,239,239,239,239,239,239,,,,239', '239,,,,,,,239,,,239,239,239,,,239,239,240,240,240,,240,,,,240,240,,', ',240,,240,240,240,240,240,240,240,,,,,,240,240,240,240,240,240,240,', ',240,,,,,,,240,,,240,240,240,240,240,240,240,240,,240,240,240,,240,240', ',240,240,240,,,,,,,,,,,,,,,,,,,,240,,,240,,,240,240,,,240,,,,,,240,', ',,,,,,240,,,,,240,240,240,240,240,240,,,,240,240,,,,,,,240,,,240,240', '240,,,240,240,241,241,241,,241,,,,241,241,,,,241,,241,241,241,241,241', '241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241,241,241', '241,241,241,241,241,,241,241,241,,241,241,,241,241,241,,,,,,,,,,,,,', ',,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,241,,,,,241,241,241', '241,241,241,,,,241,241,,,,,,,241,,,241,241,241,,,241,241,242,242,242', ',242,,,,242,242,,,,242,,242,242,242,242,242,242,242,,,,,,242,242,242', '242,242,242,242,,,242,,,,,,,242,,,242,242,242,242,242,242,242,242,,242', '242,242,,242,242,,242,242,242,,,,,,,,,,,,,,,,,,,,242,,,242,,,242,242', ',,242,,,,,,242,,,,,,,,242,,,,,242,242,242,242,242,242,,,,242,242,,,', ',,,242,,,242,242,242,,,242,242,243,243,243,,243,,,,243,243,,,,243,,243', '243,243,243,243,243,243,,,,,,243,243,243,243,243,243,243,,,243,,,,,', ',243,,,243,243,243,243,243,243,243,243,,243,243,243,,243,243,,243,243', '243,,,,,,,,,,,,,,,,,,,,243,,,243,,,243,243,,,243,,,,,,243,,,,,,,,243', ',,,,243,243,243,243,243,243,,,,243,243,,,,,,,243,,,243,243,243,,,243', '243,244,244,244,,244,,,,244,244,,,,244,,244,244,244,244,244,244,244', ',,,,,244,244,244,244,244,244,244,,,244,,,,,,,244,,,244,244,244,244,244', '244,244,244,,244,244,244,,244,244,,244,244,244,,,,,,,,,,,,,,,,,,,,244', ',,244,,,244,244,,,244,,,,,,244,,,,,,,,244,,,,,244,244,244,244,244,244', ',,,244,244,,,,,,,244,,,244,244,244,,,244,244,245,245,245,,245,,,,245', '245,,,,245,,245,245,245,245,245,245,245,,,,,,245,245,245,245,245,245', '245,,,245,,,,,,,245,,,245,245,245,245,245,245,245,245,,245,245,245,', '245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245,,,245,,,245,245,,,245,,', ',,,245,,,,,,,,245,,,,,245,245,245,245,245,245,,,,245,245,,,,,,,245,', ',245,245,245,,,245,245,246,246,246,,246,,,,246,246,,,,246,,246,246,246', '246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246', '246,246,246,246,246,246,246,,246,246,246,,246,246,,246,246,246,,,,,', ',,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,246,,,,,246', '246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246,,,246,246,247', '247,247,,247,,,,247,247,,,,247,,247,247,247,247,247,247,247,,,,,,247', '247,247,247,247,247,247,,,247,,,,,,,247,,,247,247,247,247,247,247,247', '247,,247,247,247,,247,247,,247,247,247,,,,,,,,,,,,,,,,,,,,247,,,247', ',,247,247,,,247,,,,,,247,,,,,,,,247,,,,,247,247,247,247,247,247,,,,247', '247,,,,,,,247,,,247,247,247,,,247,247,248,248,248,,248,,,,248,248,,', ',248,,248,248,248,248,248,248,248,,,,,,248,248,248,248,248,248,248,', ',248,,,,,,,248,,,248,248,248,248,248,248,248,248,,248,248,248,,248,248', ',248,248,248,,,,,,,,,,,,,,,,,,,,248,,,248,,,248,248,,,248,,,,,,248,', ',,,,,,248,,,,,248,248,248,248,248,248,,,,248,248,,,,,,,248,,,248,248', '248,,,248,248,249,249,249,,249,,,,249,249,,,,249,,249,249,249,249,249', '249,249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249,249,249', '249,249,249,249,249,,249,249,249,,249,249,,249,249,249,,,,,,,,,,,,,', ',,,,,,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249,249,249', '249,249,249,,,,249,249,,,,,,,249,,,249,249,249,,,249,249,250,250,250', ',250,,,,250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250', '250,250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250', '250,250,,250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250', ',,250,,,,,,250,,,,,,,,250,,,,,250,250,250,250,250,250,,,,250,250,,,', ',,,250,,,250,250,250,,,250,250,251,251,251,,251,,,,251,251,,,,251,,251', '251,251,251,251,251,251,,,,,,251,251,251,251,251,251,251,,,251,,,,,', ',251,,,251,251,251,251,251,251,251,251,,251,251,251,,251,251,,251,251', '251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251,251,,,251,,,,,,251,,,,,,,,251', ',,,,251,251,251,251,251,251,,,,251,251,,,,,,,251,,,251,251,251,,,251', '251,252,252,252,,252,,,,252,252,,,,252,,252,252,252,252,252,252,252', ',,,,,252,252,252,252,252,252,252,,,252,,,,,,,252,,,252,252,252,252,252', '252,252,252,,252,252,252,,252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252', ',,252,,,252,252,,,252,,,,,,252,,,,,,,,252,,,,,252,252,252,252,252,252', ',,,252,252,,,,,,,252,,,252,252,252,,,252,252,253,253,253,,253,,,,253', '253,,,,253,,253,253,253,253,253,253,253,,,,,,253,253,253,253,253,253', '253,,,253,,,,,,,253,,,253,253,253,253,253,253,253,253,,253,253,253,', '253,253,,253,253,253,,,,,,,,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,', ',,,253,,,,,,,,253,,,,,253,253,253,253,253,253,,,,253,253,,,,,,,253,', ',253,253,253,,,253,253,254,254,254,,254,,,,254,254,,,,254,,254,254,254', '254,254,254,254,,,,,,254,254,254,254,254,254,254,,,254,,,,,,,254,,,254', '254,254,254,254,254,254,254,,254,254,254,,254,254,,254,254,254,,,,,', ',,,,,,,,,,,,,,254,,,254,,,254,254,,,254,,,,,,254,,,,,,,,254,,,,,254', '254,254,254,254,254,,,,254,254,,,,,,,254,,,254,254,254,,,254,254,255', '255,255,,255,,,,255,255,,,,255,,255,255,255,255,255,255,255,,,,,,255', '255,255,255,255,255,255,,,255,,,,,,,255,,,255,255,255,255,255,255,255', '255,,255,255,255,,255,255,,255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255', ',,255,255,,,255,,,,,,255,,,,,,,,255,,,,,255,255,255,255,255,255,,,,255', '255,,,,,,,255,,,255,255,255,,,255,255,256,256,256,,256,,,,256,256,,', ',256,,256,256,256,256,256,256,256,,,,,,256,256,256,256,256,256,256,', ',256,,,,,,,256,,,256,256,256,256,256,256,256,256,,256,256,256,,256,256', ',256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,256,,,256,,,,,,256,', ',,,,,,256,,,,,256,256,256,256,256,256,,,,256,256,,,,,,,256,,,256,256', '256,,,256,256,258,258,258,,258,,,,258,258,,,,258,,258,258,258,258,258', '258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,,,258,,,258,258,258', '258,258,258,258,258,,258,258,258,,258,258,,258,258,258,,,,,,,,,,,,,', ',,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,258,,,,,258,258,258', '258,258,258,,,,258,258,,,,,,,258,,,258,258,258,,,258,258,259,259,259', ',259,,,,259,259,,,,259,,259,259,259,259,259,259,259,,,,,,259,259,259', '259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259,259,259,259,,259', '259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259,,,259,259', ',,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259,,,,259,259,,,', ',,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260,260,,,,260,,260', '260,260,260,260,260,260,,,,,,260,260,260,260,260,260,260,,,260,,,,,', ',260,,,260,260,260,260,260,260,260,260,,260,260,260,,260,260,,260,260', '260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,,,,,260,,,,,,,,260', ',,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,,,260,260,260,,,260', '260,261,261,261,,261,,,,261,261,,,,261,,261,261,261,261,261,261,261', ',,,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261,261,261,261,261', '261,261,261,,261,261,261,,261,261,,261,261,261,,,,,,,,,,,,,,,,,,,,261', ',,261,,,261,261,,,261,,,,,,261,,,,,,,,261,,,,,261,261,261,261,261,261', ',,,261,261,,,,,,,261,,,261,261,261,,,261,261,794,794,794,,794,,,,794', '794,,,,794,,794,794,794,794,794,794,794,,,,,,794,794,794,794,794,794', '794,,,794,,,,,,,794,,,794,794,794,794,794,794,794,794,,794,794,794,', '794,794,,794,794,794,,,,,,,,,,,,,,,,,,,,794,,,794,,,794,794,,,794,,', ',,,794,,,,,,,,794,,,,,794,794,794,794,794,794,,,,794,794,,,,,,,794,', ',794,794,794,,,794,794,793,793,793,,793,,,,793,793,,,,793,,793,793,793', '793,793,793,793,,,,,,793,793,793,793,793,793,793,,,793,,,,,,,793,,,793', '793,793,793,793,793,793,793,,793,793,793,,793,793,,793,793,793,,,,,', ',,,,,,,,,,,,,,793,,,793,,,793,793,,,793,,,,,,793,,,,,,,,793,,,,,793', '793,793,793,793,793,,,,793,793,,,,,,,793,,,793,793,793,,,793,793,268', '268,268,,268,,,,268,268,,,,268,,268,268,268,268,268,268,268,,,,,,268', '268,268,268,268,268,268,,,268,,,,,,,268,,,268,268,268,268,268,268,268', '268,268,268,268,268,,268,268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268', ',,268,268,,,268,,268,,268,,268,,,,,,,,268,,,,,268,268,268,268,268,268', ',,,268,268,,,,,,,268,,268,268,268,268,,,268,268,792,792,792,,792,,,', '792,792,,,,792,,792,792,792,792,792,792,792,,,,,,792,792,792,792,792', '792,792,,,792,,,,,,,792,,,792,792,792,792,792,792,792,792,,792,792,792', ',792,792,,792,792,792,,,,,,,,,,,,,,,,,,,,792,,,792,,,792,792,,,792,', ',,,,792,,,,,,,,792,,,,,792,792,792,792,792,792,,,,792,792,,,,,,,792', ',,792,792,792,,,792,792,274,274,274,,274,,,,274,274,,,,274,,274,274', '274,274,274,274,274,,,,,,274,274,274,274,274,274,274,,,274,,,,,,,274', ',,274,274,274,274,274,274,274,274,274,274,274,274,,274,274,,274,274', '274,,,,,,,,,,,,,,,,,,,,274,,,274,,,274,274,,,274,,274,,274,,274,,,,', ',,,274,,,,,274,274,274,274,274,274,,,,274,274,,,,,,,274,,274,274,274', '274,,,274,274,277,277,277,,277,,,,277,277,,,,277,,277,277,277,277,277', '277,277,,,,,,277,277,277,277,277,277,277,,,277,,,,,,,277,,,277,277,277', '277,277,277,277,277,277,277,277,277,,277,277,,277,277,277,,,,,,,,,,', ',,,,,,,,,277,,,277,,,277,277,,,277,,277,,277,,277,,,,,,,,277,,,,,277', '277,277,277,277,277,,,,277,277,277,,,,,,277,,277,277,277,277,,,277,277', '791,791,791,,791,,,,791,791,,,,791,,791,791,791,791,791,791,791,,,,', ',791,791,791,791,791,791,791,,,791,,,,,,,791,,,791,791,791,791,791,791', '791,791,,791,791,791,,791,791,,791,791,791,,,,,,,,,,,,,,,,,,,,791,,', '791,,,791,791,,,791,,,,,,791,,,,,,,,791,,,,,791,791,791,791,791,791', ',,,791,791,,,,,,,791,,,791,791,791,,,791,791,777,777,777,,777,,,,777', '777,,,,777,,777,777,777,777,777,777,777,,,,,,777,777,777,777,777,777', '777,,,777,,,,,,,777,,,777,777,777,777,777,777,777,777,,777,777,777,', '777,777,,777,777,777,,,,,,,,,,,,,,,,,,,,777,,,777,,,777,777,,,777,,', ',,,777,,,,,,,,777,,,,,777,777,777,777,777,777,,,,777,777,,,,,,,777,', ',777,777,777,,,777,777,775,775,775,,775,,,,775,775,,,,775,,775,775,775', '775,775,775,775,,,,,,775,775,775,775,775,775,775,,,775,,,,,,,775,,,775', '775,775,775,775,775,775,775,,775,775,775,,775,775,,775,775,775,,,,,', ',,,,,,,,,,,,,,775,,,775,,,775,775,,,775,,,,,,775,,,,,,,,775,,,,,775', '775,775,775,775,775,,,,775,775,,,,,,,775,,,775,775,775,,,775,775,284', '284,284,,284,,,,284,284,,,,284,,284,284,284,284,284,284,284,,,,,,284', '284,284,284,284,284,284,,,284,,,,,,,284,,,284,284,284,284,284,284,284', '284,,284,284,284,,284,284,,284,284,284,,,,,,,,,,,,,,,,,,,,284,,,284', ',,284,284,,,284,,,,,,284,,,,,,,,284,,,,,284,284,284,284,284,284,,,,284', '284,,,,,,,284,,,284,284,284,,,284,284,286,286,286,,286,,,,286,286,,', ',286,,286,286,286,286,286,286,286,,,,,,286,286,286,286,286,286,286,', ',286,,,,,,,286,,,286,286,286,286,286,286,286,286,,286,286,286,,286,286', ',286,286,286,,,,,,,,,,,,,,,,,,,,286,,,286,,,286,286,,,286,,,,,,286,', ',,,,,,286,,,,,286,286,286,286,286,286,,,,286,286,,,,,,,286,,,286,286', '286,,,286,286,288,288,288,,288,,,,288,288,,,,288,,288,288,288,288,288', '288,288,,,,,,288,288,288,288,288,288,288,,,288,,,,,,,288,,,288,288,288', '288,288,288,288,288,,288,288,288,,288,288,,288,288,288,,,,,,,,,,,,,', ',,,,,,288,,,288,,,288,288,,,288,,,,,,288,,,,,,,,288,,,,,288,288,288', '288,288,288,,,,288,288,,,,,,,288,,,288,288,288,,,288,288,291,291,291', ',291,,,,291,291,,,,291,,291,291,291,291,291,291,291,,,,,,291,291,291', '291,291,291,291,,,291,,,,,,,291,,,291,291,291,291,291,291,291,291,,291', '291,291,,291,291,,291,291,291,,,,,,,,,,,,,,,,,,,,291,,,291,,,291,291', ',,291,,,,,,291,,,,,,,,291,,,,,291,291,291,291,291,291,,,,291,291,,,', ',,,291,,,291,291,291,,,291,291,297,297,297,297,297,,,,297,297,,,,297', ',297,297,297,297,297,297,297,,,,,,297,297,297,297,297,297,297,,,297', ',,,,,297,297,,297,297,297,297,297,297,297,297,297,,297,297,297,,297', '297,,297,297,297,,,,,,,,,,,,,,,,,,,,297,,,297,,,297,297,,,297,,297,', ',,297,,,,,,,,297,,,,,297,297,297,297,297,297,,,,297,297,,,,,,,297,,', '297,297,297,,,297,297,753,753,753,,753,,,,753,753,,,,753,,753,753,753', '753,753,753,753,,,,,,753,753,753,753,753,753,753,,,753,,,,,,,753,,,753', '753,753,753,753,753,753,753,753,753,753,753,,753,753,,753,753,753,,', ',,,,,,,,,,,,,,,,,753,,,753,,,753,753,,,753,,753,,753,,753,,,,,,,,753', ',,,,753,753,753,753,753,753,,,,753,753,,,,,,,753,,753,753,753,753,,', '753,753,747,747,747,,747,,,,747,747,,,,747,,747,747,747,747,747,747', '747,,,,,,747,747,747,747,747,747,747,,,747,,,,,,,747,,,747,747,747,747', '747,747,747,747,,747,747,747,,747,747,,747,747,747,,,,,,,,,,,,,,,,,', ',,747,,,747,,,747,747,,,747,,,,,,747,,,,,,,,747,,,,,747,747,747,747', '747,747,,,,747,747,,,,,,,747,,,747,747,747,,,747,747,303,303,303,,303', ',,,303,303,,,,303,,303,303,303,303,303,303,303,,,,,,303,303,303,303', '303,303,303,,,303,,,,,,,303,,,303,303,303,303,303,303,303,303,,303,303', '303,,303,303,,,,303,,,,,,,,,,,,,,,,,,,,303,,,303,,,303,303,,,303,,,', ',,,,,,,,,,,,,,,303,303,303,303,303,303,,,,303,303,,,,303,,,303,,,303', '303,303,,,303,303,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91', '91,91,91,91,91,91,91,,,,91,91,91,91,91,91,91,91,91,91,,,,,,91,91,91', '91,91,91,91,91,91,91,91,91,,91,,,,,,,91,91,,91,91,91,91,91,91,91,,,91', '91,,,,91,91,91,91,,,,,,,,,,,,,,91,91,,91,91,91,91,91,91,91,91,91,91', '91,,,91,,,,,,,,,,,,,,,,,,,,91,12,12,12,12,12,12,12,12,12,12,12,12,12', '12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12,12,12,12,12,,', ',,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12,12,12,12,12', '12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12,12,12,12,12', '12,12,12,,,12,12,,,,,,,,,,12,,,,,,,,,12,74,74,74,74,74,74,74,74,74,74', '74,74,74,74,74,74,74,74,74,74,74,74,74,74,,,,74,74,74,74,74,74,74,74', '74,74,,,,,,74,74,74,74,74,74,74,74,74,74,74,74,,74,,,,,,,74,74,,74,74', '74,74,74,74,74,,,74,74,,,,74,74,74,74,,,,,,74,,,,,,,,74,74,,74,74,74', '74,74,74,74,74,74,74,74,,,74,,,,,,,,,,,,,,,,,,,,74,763,763,763,763,763', '763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763', '763,763,,,,763,763,763,763,763,763,763,763,763,763,,,,,,763,763,763', '763,763,763,763,763,763,,,763,,,,,,,,,763,763,,763,763,763,763,763,763', '763,,,763,763,,,,763,763,763,763,,,,,,,,,,,,,,763,763,,763,763,763,763', '763,763,763,763,763,763,763,,,763,,,,,,,,,,,,,,,,,,,,763,634,634,634', '634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634', '634,634,634,634,,,,634,634,634,634,634,634,634,634,634,634,,,,,,634', '634,634,634,634,634,634,634,634,,,634,,,,,,,,,634,634,,634,634,634,634', '634,634,634,,,634,634,,,,634,634,634,634,,,,,,,,,,,,,,634,634,,634,634', '634,634,634,634,634,634,634,634,634,,,634,634,,,,,,,,,,634,,,,,,,,,634', '11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11', '11,,,,11,11,11,11,11,11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11', '11,,11,,,,,,,,,11,11,,11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,', ',,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11,11,11,,,11,11,,,,,,,,,', '11,,,,,,,,,11,408,408,408,408,408,408,408,408,408,408,408,408,408,408', '408,408,408,408,408,408,408,408,408,408,,,,408,408,408,408,408,408,408', '408,408,408,,,,,,408,408,408,408,408,408,408,408,408,,,408,,,,,,,,,408', '408,,408,408,408,408,408,408,408,,,408,408,,,,408,408,408,408,,,,,,', ',,,,,,,408,408,,408,408,408,408,408,408,408,408,408,408,408,,,408,408', ',,,487,,,,,,408,487,487,487,,,487,487,487,408,487,,,,,,,,,487,487,,', ',,,,,,,487,487,,487,487,487,487,487,,,,,,,,264,264,,,264,,,,,,,,,264', '264,,264,264,264,264,264,264,264,,,264,264,487,,,264,264,264,264,487', ',,,,487,487,,,,,,,264,264,,264,264,264,264,264,264,264,264,264,264,264', '487,487,264,,,,,1017,1017,,,1017,,,487,,,,,487,1017,1017,264,1017,1017', '1017,1017,1017,1017,1017,,,1017,1017,,,,1017,1017,1017,1017,,,,,,1017', ',,,,,,,1017,1017,,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017', '1017,,,1017,,,,,453,453,,,453,,,,,,,,,453,453,1017,453,453,453,453,453', '453,453,,,453,453,,,,453,453,453,453,,,,,,453,,,,,,,,453,453,,453,453', '453,453,453,453,453,453,453,453,453,,,453,,,,,1016,1016,,,1016,,,,,', ',,,1016,1016,453,1016,1016,1016,1016,1016,1016,1016,,,1016,1016,,,,1016', '1016,1016,1016,,,,,,1016,,,,,,,,1016,1016,,1016,1016,1016,1016,1016', '1016,1016,1016,1016,1016,1016,,,1016,,,,,454,454,,,454,,,,,,,,,454,454', '1016,454,454,454,454,454,454,454,,,454,454,,,,454,454,454,454,,,,,,454', ',,,,,,,454,454,,454,454,454,454,454,454,454,454,454,454,454,,1002,454', '1002,1002,1002,1002,1002,1000,,1000,1000,1000,1000,1000,,,1002,,,,,454', ',1000,,,,,,,,,,,,,,,1002,,,,,,,1000,,967,967,1002,1002,967,,,1000,1000', '1000,1000,,,967,967,,967,967,967,967,967,967,967,,,967,967,,,,967,967', '967,967,,,1002,,,967,,,,1000,,,,967,967,,967,967,967,967,967,967,967', '967,967,967,967,,,967,,,,,522,522,,,522,,,,,,,,,522,522,967,522,522', '522,522,522,522,522,,,522,522,,,,522,522,522,522,,,,,,522,,,,,,,,522', '522,,522,522,522,522,522,522,522,522,522,522,522,,,522,,,,,523,523,', ',523,,,,,,,,,523,523,522,523,523,523,523,523,523,523,,,523,523,,,,523', '523,523,523,,,,,,523,,,,,,,,523,523,,523,523,523,523,523,523,523,523', '523,523,523,,950,523,950,950,950,950,950,,,,,,,,,,950,,,,,523,,,,,,', ',,,,,,,,,,950,950,532,532,,,532,,,950,950,950,950,,,532,532,,532,532', '532,532,532,532,532,,,532,532,,,,532,532,532,532,,,,,,532,,,,950,,,', '532,532,,532,532,532,532,532,532,532,532,532,532,532,,,532,,,,,533,533', ',,533,,,,,,,,,533,533,532,533,533,533,533,533,533,533,,,533,533,,,,533', '533,533,533,,,,,,533,,,,,,,,533,533,,533,533,533,533,533,533,533,533', '533,533,533,,927,533,927,927,927,927,927,925,,925,925,925,925,925,,', '927,,,,,533,,925,923,,923,923,923,923,923,921,,921,921,921,921,921,927', ',923,,,,,925,,921,,927,927,,,,,,925,925,,,,551,923,551,551,551,551,551', ',921,,,,923,923,,,551,921,921,921,921,898,927,898,898,898,898,898,896', '925,896,896,896,896,896,,,898,551,,,,,,896,,923,551,551,551,551,,893', '921,893,893,893,893,893,898,,,,,,,896,,893,,898,898,,,,896,896,896,896', ',,,,551,,,,,,,893,,,,,,,,,893,893,893,893,,898,,213,213,,,213,896,,', ',,,,,213,213,,213,213,213,213,213,213,213,,,213,213,,,893,213,213,213', '213,,,,,,213,,,,,,,,213,213,,213,213,213,213,213,213,213,213,213,213', '213,,,213,,,,,214,214,,,214,,,,,,,,,214,214,213,214,214,214,214,214', '214,214,,,214,214,,,,214,214,214,214,,,,,,214,,,,,,,,214,214,,214,214', '214,214,214,214,214,214,214,214,214,,,214,,,,,593,593,,,593,,,,,,,,', '593,593,214,593,593,593,593,593,593,593,,,593,593,,,,593,593,593,593', ',,,,,593,,,,,,,,593,593,,593,593,593,593,593,593,593,593,593,593,593', ',,593,,,,,594,594,,,594,,,,,,,,,594,594,593,594,594,594,594,594,594', '594,,,594,594,,,,594,594,594,594,,,,,,594,,,,,,,,594,594,,594,594,594', '594,594,594,594,594,594,594,594,,606,594,606,606,606,606,606,761,,761', '761,761,761,761,,,606,,,,,594,,761,,,,,719,,719,719,719,719,719,,,,606', '606,,,,,719,761,,606,606,606,606,,,,761,761,761,761,,,,,,,,,719,,,,', ',,,,752,752,719,719,752,,,,606,,,,,752,752,761,752,752,752,752,752,752', '752,,,752,752,,,,752,752,752,752,,,719,,,752,,,,,,,,752,752,,752,752', '752,752,752,752,752,752,752,752,752,,,752,,,,,751,751,,,751,,,,,,,,', '751,751,752,751,751,751,751,751,751,751,,,751,751,,,,751,751,751,751', ',,,,,751,,,,,,,,751,751,,751,751,751,751,751,751,751,751,751,751,751', ',340,751,340,340,340,340,340,717,,717,717,717,717,717,,,340,,,,,751', ',717,715,,715,715,715,715,715,,,,,,,,340,340,715,,,,,717,,340,340,340', '340,,,,717,717,717,717,,,,665,715,665,665,665,665,665,,,,715,715,715', '715,,,665,,,,,,340,,,,,,,717,,,,,,,,,665,,,,,,,,715,665,665,665,665', ',,,,,,,,,,,,,,,,,,,,,,,,665,,,,,,,,665' ] racc_action_check = arr = ::Array.new(26642, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_action_pointer = [ nil, 1215, 4534, 1119, nil, 644, nil, nil, 6082, 878, nil, 24807, 24275, 996, nil, 959, 976, 630, 395, 876, 685, nil, -78, 6362, 2560, 952, nil, 295, nil, 196, 928, 1185, 6502, 6642, 6782, nil, 5380, 6922, 7062, nil, 848, 258, 295, 830, 184, 7482, 7622, 7762, 725, 472, nil, nil, nil, nil, nil, nil, nil, nil, nil, 796, nil, -76, 7902, nil, -19, nil, 8042, 8182, nil, nil, 8322, 8462, 757, nil, 24408, nil, nil, nil, nil, nil, -95, nil, nil, nil, nil, nil, nil, 681, 663, 658, 638, 24142, nil, nil, nil, nil, nil, nil, 125, nil, nil, 263, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 9162, nil, nil, nil, nil, 9302, 9442, 9582, 9722, 9862, 648, nil, 634, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 629, nil, 1996, 10002, 10142, 10282, 25975, 26043, nil, nil, 10422, 10562, 10702, 10842, 10982, 11122, nil, nil, 409, 174, 103, 466, -30, 373, 412, nil, 17982, 1714, 211, 18262, 18402, 18542, 18682, 18822, 18962, 19102, 19242, 19382, 19522, 19662, 19802, 19942, 20082, 20222, 20362, 20502, 20642, 20782, 20922, 21062, 5802, 21202, 21342, 21482, 21622, nil, nil, 25059, nil, nil, 200, 22042, nil, 158, nil, nil, nil, 22322, nil, nil, 22462, nil, 3406, nil, 60, -14, nil, 23022, 12, 23162, nil, 23302, nil, -104, 23442, nil, nil, 412, nil, 891, 23582, 1169, 3970, 1183, 1210, 1171, 24002, 3124, 611, 597, 567, 1226, 768, nil, 1140, 1097, -24, nil, nil, nil, 1123, -44, 1026, 11962, nil, -85, 1079, 735, nil, 1073, nil, 12382, 4252, nil, 12522, 1048, nil, 290, 324, 1171, 12942, nil, nil, 26446, 396, 136, 157, 13362, 13502, 497, 1279, 1166, -19, 34, 536, 1247, 164, 1284, nil, nil, 14482, nil, 14622, 624, -54, 595, 605, 666, 626, 603, 326, 628, nil, 181, nil, nil, nil, nil, nil, 696, nil, 595, nil, 535, nil, 693, 465, nil, 738, 460, nil, 766, -28, nil, 771, -33, nil, 299, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 5239, 24940, nil, nil, nil, nil, 867, nil, nil, 895, 16722, 897, nil, nil, 1855, 902, nil, nil, 913, 927, 506, 504, 1442, nil, nil, nil, 533, 0, 1045, nil, nil, 1310, 1053, nil, 3124, nil, 1007, nil, nil, 1573, nil, nil, nil, nil, 237, nil, 25195, 25331, 5942, 177, 17702, 17562, 17422, 4111, 4252, 332, 493, 1051, 1005, 997, 991, 5380, 5521, 5404, 5098, 1001, 1135, 1258, 1392, 5239, 4393, 4534, 4675, 4816, 971, 1200, 3970, 4957, 3547, 210, 25059, nil, nil, nil, nil, nil, nil, 252, 274, 926, 917, nil, nil, 17282, nil, nil, 17142, nil, 17002, nil, 256, nil, 16862, nil, nil, 16582, 1148, 891, 885, nil, nil, 855, 16442, 840, 16302, 25508, 25576, 483, 866, nil, 16162, 769, nil, 16022, 15882, 25678, 25746, 3829, 15742, 875, 868, 526, nil, nil, 15602, nil, nil, 15462, nil, 747, nil, 389, 769, 58, 25869, nil, 721, 716, nil, 712, 701, 699, nil, nil, nil, nil, nil, nil, nil, nil, 677, 892, nil, nil, 15322, nil, nil, nil, 764, nil, nil, nil, 756, nil, nil, 723, 5521, 738, nil, 5662, 55, 181, 731, 694, nil, 15182, 26111, 26179, -5, nil, 340, 232, -21, nil, 749, nil, 9, 15042, nil, 26241, nil, 14902, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 333, nil, nil, 437, nil, nil, nil, 107, nil, nil, 105, nil, 114, nil, 24674, nil, 42, 14762, 14342, 372, 1212, 14202, 14062, 13922, 13782, 1190, nil, nil, nil, 13642, 13222, 1174, nil, 13082, 12802, nil, 136, 138, 401, 658, 1117, 1714, 1075, nil, nil, 26507, nil, nil, 1173, -14, -49, nil, nil, nil, nil, 1013, nil, 1046, 12662, nil, nil, 12242, nil, 1135, -109, 12102, 1014, nil, 1019, 29, 30, 1063, 152, 705, 1078, 1066, 11822, 2701, 1142, 258, 1200, 11682, nil, 1094, 226, nil, nil, nil, 4393, 2278, 1111, 356, nil, nil, 619, 26470, nil, 26453, nil, 26269, nil, 11542, nil, 932, nil, 1143, 407, 1148, nil, nil, nil, nil, 48, nil, 1263, nil, nil, nil, nil, 1269, nil, 11402, 1159, 163, 31, 194, -1, 23862, nil, 569, nil, 26384, 26316, 23722, nil, nil, nil, -93, 632, 4675, 4957, 26248, 269, 24541, 203, 904, 5098, nil, nil, nil, nil, nil, nil, nil, -27, 22882, 1996, 22742, nil, 88, nil, 2278, nil, 2983, nil, nil, 3265, nil, 2137, nil, 3688, 22602, 22182, 21902, 21762, 154, 18122, 182, 184, nil, 199, 274, 276, nil, 356, 341, 360, 349, 17842, nil, nil, 1855, nil, nil, nil, 3547, 3688, nil, nil, nil, 408, 28, nil, nil, 540, nil, 3406, 422, 466, nil, nil, nil, nil, 452, 570, 473, 490, nil, nil, nil, 493, 496, nil, 502, 520, nil, 522, nil, nil, 527, 993, 549, 1194, nil, 730, nil, 11262, 739, 2560, 2419, nil, 16, 21, 189, 441, 500, nil, 651, 4816, 9022, nil, -80, 785, 788, 672, nil, nil, nil, nil, nil, nil, nil, nil, 687, 677, nil, 2842, 8882, 8742, 2419, 455, nil, nil, 25921, nil, nil, 25897, nil, 25890, nil, nil, 722, 1178, 8602, 629, 787, 835, 3829, 734, 840, nil, 3265, nil, nil, 51, 7342, nil, nil, nil, nil, nil, 25839, nil, 25832, nil, 25815, nil, 25808, nil, nil, nil, nil, 394, 1276, 754, nil, 53, nil, 877, 879, 7202, 2137, nil, nil, 887, 183, nil, nil, nil, nil, 25638, nil, 777, nil, nil, 779, 809, 821, 822, nil, 823, nil, 227, nil, nil, nil, 486, 25440, nil, nil, 860, nil, nil, nil, 1573, 54, 80, 303, 927, 118, nil, 859, 862, 863, 865, 880, 1153, 886, 1060, 4111, nil, nil, nil, 33, 2983, nil, nil, 2842, 2701, nil, 25400, nil, 25393, nil, 1373, nil, 1116, nil, nil, nil, 801, 955, 959, nil, 1044, 6222, 25263, 25127, 134, 859, nil, nil, nil, nil, 921, 944, 372, nil, nil, nil, 1074, 1077, 1078, 959, 968, 969, 970, nil, nil, 975, -9, 52, 124, -8, 980, 987, nil, nil, nil, nil, 725, nil, nil, nil, nil, 44, nil, 1034, nil ] racc_action_default = [ -1, -628, -627, -628, -2, -614, -4, -5, -628, -8, -9, -628, -628, -628, -29, -628, -628, -628, -280, -628, -40, -43, -616, -628, -48, -50, -51, -52, -57, -257, -257, -257, -294, -333, -334, -69, -627, -73, -81, -83, -628, -516, -517, -628, -628, -628, -628, -628, -616, -238, -271, -272, -273, -274, -275, -276, -277, -278, -279, -602, -282, -285, -627, -292, -302, -405, -628, -628, -307, -310, -614, -628, -318, -325, -628, -335, -336, -447, -448, -449, -450, -451, -452, -627, -455, -627, -627, -627, -627, -627, -627, -627, -492, -498, -500, -501, -502, -503, -600, -505, -506, -601, -508, -509, -510, -511, -512, -513, -514, -515, -520, -521, 1059, -3, -615, -623, -624, -625, -7, -628, -628, -628, -628, -628, -628, -17, -628, -112, -113, -114, -115, -116, -117, -118, -119, -120, -124, -125, -126, -127, -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, -189, -190, -191, -192, -193, -194, -22, -121, -627, -628, -628, -627, -628, -628, -612, -613, -628, -628, -628, -628, -628, -616, -617, -47, -628, -516, -517, -628, -280, -628, -628, -230, -628, -627, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -411, -414, -628, -610, -611, -58, -628, -301, -628, -428, -431, -64, -627, -425, -65, -616, -66, -239, -252, -627, -627, -256, -628, -262, -628, -627, -492, -593, -616, -628, -67, -68, -614, -13, -14, -628, -71, -627, -616, -628, -74, -77, -627, -89, -90, -628, -628, -97, -294, -297, -616, -418, -333, -334, -337, -426, -628, -79, -628, -85, -290, -499, -628, -215, -216, -231, -628, -627, -284, -628, -628, -240, -620, -620, -628, -627, -303, -304, -548, -49, -628, -628, -628, -628, -614, -628, -615, -516, -517, -628, -628, -280, -628, -358, -359, -628, -321, -628, -112, -113, -154, -155, -156, -172, -177, -184, -187, -328, -628, -516, -517, -588, -589, -453, -628, -476, -628, -478, -628, -480, -628, -628, -460, -628, -628, -466, -628, -628, -472, -628, -628, -474, -628, -491, -493, -494, -495, -496, -6, -626, -23, -24, -25, -26, -27, -627, -628, -19, -20, -21, -122, -628, -30, -39, -267, -628, -628, -266, -31, -197, -616, -247, -248, -627, -627, -603, -604, -257, -423, -605, -606, -604, -603, -257, -422, -424, -605, -606, -37, -205, -38, -628, -41, -42, -195, -262, -44, -45, -46, -616, -300, -628, -628, -627, -290, -628, -628, -628, -206, -207, -208, -209, -210, -211, -212, -213, -217, -218, -219, -220, -221, -222, -223, -224, -225, -226, -227, -228, -229, -232, -233, -234, -235, -616, -627, -257, -603, -604, -54, -59, -258, -419, -627, -627, -616, -616, -296, -253, -628, -261, -254, -628, -259, -628, -263, -628, -598, -628, -599, -12, -615, -16, -616, -70, -288, -86, -75, -628, -616, -627, -628, -628, -96, -628, -499, -628, -82, -87, -628, -628, -628, -628, -236, -628, -439, -628, -286, -618, -241, -622, -621, -243, -622, -291, -628, -591, -620, -628, -628, -548, -408, -587, -587, -531, -533, -533, -533, -547, -549, -550, -551, -552, -553, -554, -555, -556, -628, -558, -560, -562, -567, -569, -570, -572, -577, -579, -580, -582, -583, -584, -628, -627, -349, -350, -627, -628, -628, -628, -628, -434, -627, -628, -628, -290, -315, -107, -108, -628, -110, -628, -280, -628, -628, -326, -548, -330, -628, -454, -477, -482, -483, -485, -456, -479, -457, -481, -458, -459, -628, -462, -464, -628, -465, -468, -469, -628, -470, -471, -628, -497, -628, -18, -628, -28, -270, -628, -628, -427, -628, -249, -251, -628, -628, -60, -245, -246, -420, -628, -628, -62, -421, -628, -628, -299, -603, -604, -603, -604, -616, -195, -628, -394, -395, -616, -397, -412, -53, -415, -627, -429, -432, -244, -295, -627, -260, -264, -628, -594, -595, -628, -596, -15, -72, -628, -78, -84, -616, -603, -604, -627, -607, -95, -628, -80, -628, -204, -214, -616, -627, -627, -283, -616, -620, -293, -592, -406, -627, -627, -616, -628, -529, -530, -628, -628, -540, -628, -543, -628, -545, -628, -360, -628, -362, -364, -371, -616, -561, -571, -581, -585, -627, -351, -627, -308, -352, -353, -311, -628, -314, -628, -616, -603, -604, -607, -289, -628, -107, -108, -109, -628, -628, -627, -319, -522, -523, -628, -322, -627, -627, -548, -628, -628, -616, -628, -627, -461, -463, -467, -473, -475, -10, -123, -268, -628, -198, -628, -619, -627, -33, -200, -34, -201, -61, -35, -203, -36, -202, -63, -196, -628, -628, -628, -628, -427, -628, -587, -587, -376, -627, -627, -627, -393, -628, -616, -399, -556, -564, -565, -575, -627, -417, -416, -55, -627, -627, -255, -265, -597, -76, -427, -88, -298, -627, -356, -627, -440, -627, -441, -442, -287, -242, -628, -628, -616, -587, -568, -586, -532, -533, -533, -559, -533, -533, -578, -533, -556, -573, -616, -628, -369, -628, -557, -628, -354, -628, -628, -627, -627, -313, -628, -427, -628, -107, -108, -111, -616, -627, -628, -525, -628, -628, -628, -616, -527, -331, -590, -484, -487, -488, -489, -490, -628, -269, -32, -199, -250, -628, -237, -628, -374, -375, -384, -378, -386, -628, -389, -628, -391, -396, -628, -628, -628, -563, -628, -628, -627, -628, -628, -11, -627, -446, -357, -628, -628, -444, -409, -410, -407, -528, -628, -536, -628, -538, -628, -541, -628, -544, -546, -361, -363, -367, -628, -372, -305, -628, -306, -628, -628, -628, -627, -316, -427, -628, -628, -323, -327, -329, -526, -548, -486, -587, -566, -377, -627, -627, -627, -627, -576, -627, -398, -616, -401, -403, -404, -574, -628, -290, -413, -628, -430, -433, -445, -627, -516, -517, -628, -628, -280, -443, -533, -533, -533, -533, -365, -628, -370, -628, -627, -309, -312, -264, -627, -627, -320, -524, -627, -627, -373, -628, -381, -628, -383, -628, -387, -628, -390, -392, -400, -628, -289, -607, -56, -439, -627, -628, -628, -290, -628, -534, -537, -539, -542, -628, -368, -627, -435, -436, -437, -628, -628, -628, -627, -627, -627, -627, -402, -438, -616, -603, -604, -607, -289, -533, -366, -355, -317, -324, -332, -628, -379, -382, -385, -388, -427, -535, -627, -380 ] clist = [ '6,422,338,221,700,590,280,280,280,263,583,586,445,133,133,567,130,130', '369,302,275,528,330,316,316,4,213,502,224,328,559,281,281,281,419,396', '117,491,323,341,341,760,442,341,552,264,429,435,537,135,135,125,208', '376,801,676,854,316,676,319,333,334,842,496,540,543,16,113,679,342,343', '824,16,346,965,639,931,114,934,130,845,377,963,379,381,384,387,390,393', '379,727,298,341,341,341,341,130,487,722,300,16,117,750,994,959,857,282', '282,282,679,357,667,29,735,738,267,273,276,29,671,672,118,402,403,404', '405,868,620,804,615,623,617,347,29,621,378,335,621,603,604,605,394,29', '29,29,615,29,871,802,997,359,759,712,713,606,278,292,293,763,987,950', '336,803,634,907,805,670,962,550,707,340,502,408,835,415,486,29,29,16', '811,29,494,965,452,815,495,280,16,816,1027,1037,741,448,449,450,451', '676,676,841,828,843,914,375,430,380,383,1,679,959,418,423,386,1025,389', '931,414,420,418,392,439,686,878,440,444,29,765,567,400,695,29,29,29', '29,29,453,766,395,9,498,869,842,559,280,9,660,849,356,739,280,207,1045', '280,840,722,866,710,851,507,910,124,493,515,837,953,608,339,2,281,901', '546,354,509,423,16,842,754,281,373,706,501,501,567,955,669,845,377,429', '435,370,316,329,331,703,525,337,814,559,344,16,858,345,859,529,747,538', ',316,275,,,688,,526,795,,,522,341,341,29,29,29,29,,518,117,,29,29,29', '29,29,29,532,,547,,,,,807,821,282,316,29,316,,587,588,9,1046,282,,842', '298,691,511,,406,298,593,16,514,16,1028,691,512,520,16,,,768,,,768,', '956,117,29,957,722,742,722,,29,998,820,29,607,942,567,492,567,16,301', '862,891,892,,,497,,808,640,981,6,,29,589,29,133,548,655,130,29,784,', ',,647,817,789,,501,501,652,691,646,,280,632,,,,832,920,567,,,29,,29', '676,430,,,135,445,633,,,559,679,423,29,29,,673,674,439,,,985,722,,874', '662,,,,,16,,,,684,,647,872,873,,687,1038,1033,663,646,,,,,,,663,663', ',280,,,,,,529,,,,316,,,699,529,,,430,316,,645,722,29,722,423,943,651', '430,,817,829,,,439,941,,,513,,,,,,439,,,,867,,,,,,,,,999,,,722,,716', '718,720,,,,,,,29,280,413,807,,,807,,668,675,,16,758,,,,764,974,430,', '691,,944,,,423,,301,,,,567,,,439,,,,,989,,,813,,,,,,,,704,,,736,736', ',,29,,,567,,808,,,808,29,,808,755,808,133,,,130,559,640,9,,,29,806,16', '780,782,16,1029,812,,785,787,,301,444,,823,,301,,831,,,529,663,640,', '316,135,501,773,807,,,822,,,647,316,,652,,,,853,646,,806,1055,29,,,29', ',825,830,418,,29,,,,,876,,,,,,,29,779,1031,1032,29,,341,,,640,,877,', '280,,,825,,825,,,,,808,,808,861,808,430,808,,,,683,,,863,423,,29,29', ',439,,,29,29,,,29,,,,,130,,,,16,16,,,,501,,,,,885,19,,,806,808,870,19', ',,,875,316,,919,,894,894,894,,,,1039,,,,,,930,,,,,,,19,29,29,,,912,16', '16,,916,,,341,16,,,,,949,,,,,922,924,341,926,928,,929,,640,691,,,355', ',,,,29,,936,,798,,29,,,,,,29,29,,945,,,16,29,,,16,16,,,,,,,29,,316,16', ',,,736,19,,800,,,,316,946,,19,,,836,,,,,,,,,,,,,,29,16,16,,29,29,,,17', ',,16,,,17,29,,,,,732,,1009,734,,,,,844,225,846,,894,894,894,894,,894', '225,225,225,,17,307,307,29,,29,29,,16,439,,,16,996,,29,29,,1020,1021', '1022,1023,,1016,,,280,19,825,,225,225,,,225,351,443,,41,,,,16,430,41', ',,,,,423,,19,,29,,,640,29,439,,825,,,,,,,894,894,894,894,41,305,305', '16,,,17,,,1056,,225,225,225,225,17,29,799,16,,894,,,16,,,16,16,,,,833', '834,,,349,,,371,,,,,19,,19,,,,29,19,952,,,798,,,798,,798,,,,838,29,', '838,,,29,,,29,29,,19,,,41,,,,,,,,,41,,883,29,,,958,,960,,,,,,17,225', '225,225,,,,,225,225,225,225,225,225,,,,982,,983,,984,,,,17,,,,895,897', '899,,906,,,,908,909,,,,,,,,,,913,,,,19,,,,,,,225,798,,798,,798,225,798', ',225,,42,,41,,,,42,,,,938,939,,,,,,,17,,17,,,,307,17,1034,41,1035,,1036', ',,,42,306,306,,,,798,307,,,,1044,,,,,17,,225,,,,,,,970,,,,973,,225,225', ',,350,,838,372,,799,,1057,799,601,799,601,,,,,,,19,,,41,,41,993,,,305', '41,,,,18,,,,,,18,,,,,42,305,1001,1003,1005,1007,,1008,,42,41,416,,,1014', ',17,,,447,,,,18,309,309,,,,1026,,,,,1030,,,,371,,371,,,,,,19,,,19,,', ',,,,,,353,,,,,,225,,,,,799,,799,,799,,799,,,,,1051,1052,1053,1054,,504', ',506,41,508,,,510,,,42,,,,,,18,,,1058,,,,,,18,,,,,,443,,,799,42,17,', ',,,,,307,,225,,,,,,307,,549,,,,,,225,,,,,,,,,,,,,,,,,,,,,,,,,,,19,19', ',,,,,,,,,,42,,42,,,,306,42,,17,41,,17,18,,,,305,225,,,,,306,,305,,,', ',225,,42,,225,636,,,18,19,19,,,,,,19,,,,,,,,,,,,,,372,,372,,,,,,,225', '225,,,,,225,225,,,225,,41,,,41,,,,,,,19,,,,19,19,,,,,18,,18,,,19,309', '18,,42,307,,,,,,,677,,,549,307,680,309,,,682,,,,,,18,17,17,,,19,19,', ',,,,,,,19,,,,,,,,,,,677,,602,549,602,,,,,,,,,,225,,,,,,225,,,,305,,17', '17,19,,728,,19,17,,305,980,,,,,,,,225,,,41,41,,,,18,,,,42,,,,,,19,306', ',,,,,,,306,,,,904,,,17,,,,17,17,,,,,,,,,,17,,19,774,,41,41,677,549,', ',,41,,,,,19,,,,,19,,,19,19,,,,225,,17,17,42,,,42,,,,,17,225,818,,,819', ',,,,,,371,,,41,,,,41,41,,18,,,827,,,,309,41,,,,,966,,309,,17,,,,17,', '848,,977,,,,,,,,,,,,,,,41,41,,447,,,,,,,41,17,,,,,,,,,,,,,,,,,,,,18', '306,,18,,,884,,,,,,306,17,371,,,,41,,,,41,,42,42,975,,17,,,,,17,,,17', '17,,,,,,,,,,,,,,,41,,225,,,,,,,,,,,,,,,,,,,,,42,42,,,,,,42,,,41,,,,', ',,,,,,,,,,41,,309,,,41,,,41,41,,,,309,,,,,549,,,,,,372,18,18,42,,,,42', '42,,,,,,,,,,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,992,,,42,42,18,18,,,,,882', '18,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,372,,,,42,,602,,42,18,232,,976', '18,18,,,,,279,279,279,,,18,,,,,,,,325,326,327,,,,42,,,,,,,,,,,279,,', ',,,,18,18,,,,,,,,,18,,,,,42,,,,,,,,,,,,,,,42,,,,,42,,,42,42,,,,,,602', ',,,18,,,,18,,,,979,,,,,,,,,,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,18,,,,,,,,,,,,,,,18,,,,,18,,,18,18,279,421,279,,,,,441,446', ',,,,,,,,,,,,,,232,,,460,461,462,463,464,465,466,467,468,469,470,471', '472,473,474,475,476,477,478,479,480,481,482,483,484,485,,,,,,,279,,', ',,,279,,,279,,,,,,,279,,279,,279,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,534,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,279,,441,661,421,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279', ',,279,,279,,,,279,,,,,,,,,,,,279,,,,,,,,,697,698,,,,,,,,,,279,,,279', ',,,,,,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279,776,,,279,279,781,783,,,,,786,788', ',,661,790,,,,,,,,,,,,,,,,,,,,,,,,279,,,279,,,,,,,,,,,,,,,,,,,,279,,', ',,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,279,,,,,,,,,', ',,,,,,,,,,,,279,,886,,,,,,,,,,,,,,781,783,788,786,,889,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,279,886,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,279' ] racc_goto_table = arr = ::Array.new(3110, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '6,25,89,34,13,95,36,36,36,155,92,92,20,64,64,189,61,61,60,53,74,55,51', '68,68,2,27,76,22,34,185,71,71,71,30,60,98,42,67,32,32,99,30,32,154,39', '40,40,10,65,65,17,17,171,144,77,93,68,77,54,6,71,190,25,72,72,23,5,200', '19,19,14,23,19,150,26,132,8,135,61,195,6,149,6,6,6,6,6,6,6,134,49,32', '32,32,32,61,40,133,50,23,98,58,110,196,14,73,73,73,200,111,43,44,94', '94,41,41,41,44,43,43,7,19,19,19,19,112,175,147,176,175,176,5,44,176', '172,73,176,59,113,59,172,44,44,44,176,44,114,145,115,116,117,139,139', '118,48,48,48,119,135,120,70,136,66,46,142,45,148,151,152,153,76,33,147', '31,156,44,44,23,157,44,160,150,51,161,162,36,23,163,164,149,165,32,32', '32,32,77,77,145,166,145,167,170,74,173,174,1,200,196,71,6,177,135,178', '132,22,22,71,179,61,55,180,22,22,44,181,189,7,55,44,44,44,44,44,27,182', '183,9,51,184,190,185,36,9,25,134,21,95,36,18,135,36,188,133,58,154,133', '171,15,11,74,51,192,193,199,91,3,71,147,88,96,34,6,23,190,97,71,87,72', '6,6,189,144,75,195,6,40,40,100,68,101,102,103,34,104,43,185,105,23,106', '107,108,53,109,32,,68,74,,,25,,67,26,,,27,32,32,44,44,44,44,,54,98,', '44,44,44,44,44,44,27,,6,,,,,189,26,73,68,44,68,,19,19,9,93,73,,190,49', '40,5,,9,49,27,23,50,23,14,40,8,50,23,,,176,,,176,,145,98,44,145,133', '25,133,,44,99,55,44,39,94,189,48,189,23,12,26,139,139,,,48,,191,34,145', '6,,44,5,44,64,73,51,61,44,42,,,,74,76,42,,6,6,74,40,6,,36,2,,,,72,139', '189,,,44,,44,77,74,,,65,20,17,,,185,200,6,44,44,,51,51,61,,,133,133', ',154,34,,,,,23,,,,51,,74,10,10,,51,13,145,6,6,,,,,,,6,6,,36,,,,,,53', ',,,68,,,32,53,,,74,68,,41,133,44,133,6,26,41,74,,76,30,,,61,92,,,9,', ',,,,61,,,,25,,,,,,,,,139,,,133,,187,187,187,,,,,,,44,36,12,189,,,189', ',41,73,,23,32,,,,32,92,74,,40,,10,,,6,,12,,,,189,,,61,,,,,92,,,89,,', ',,,,,73,,,98,98,,,44,,,189,,191,,,191,44,,191,98,191,64,,,61,185,34', '9,,,44,34,23,22,22,23,95,155,,22,22,,12,22,,51,,12,,51,,,53,6,34,,68', '65,6,17,189,,,53,,,74,68,,74,,,,51,6,,34,26,44,,,44,,6,6,71,,44,,,,', '60,,,,,,,44,73,10,10,44,,32,,,34,,51,,36,,,6,,6,,,,,191,,191,71,191', '74,191,,,,9,,,19,6,,44,44,,61,,,44,44,,,44,,,,,61,,,,23,23,,,,6,,,,', '22,29,,,34,191,98,29,,,,98,68,,51,,6,6,6,,,,25,,,,,,51,,,,,,,29,44,44', ',,6,23,23,,6,,,32,23,,,,,51,,,,,187,187,32,187,187,,187,,34,40,,,29', ',,,,44,,19,,138,,44,,,,,,44,44,,19,,,23,44,,,23,23,,,,,,,44,,68,23,', ',,98,29,,143,,,,68,98,,29,,,138,,,,,,,,,,,,,,44,23,23,,44,44,,,24,,', '23,,,24,44,,,,,12,,34,12,,,,,143,24,143,,6,6,6,6,,6,24,24,24,,24,24', '24,44,,44,44,,23,61,,,23,98,,44,44,,187,187,187,187,,27,,,36,29,6,,24', '24,,,24,24,29,,56,,,,23,74,56,,,,,,6,,29,,44,,,34,44,61,,6,,,,,,,6,6', '6,6,56,56,56,23,,,24,,,187,,24,24,24,24,24,44,140,23,,6,,,23,,,23,23', ',,,12,12,,,56,,,56,,,,,29,,29,,,,44,29,138,,,138,,,138,,138,,,,140,44', ',140,,,44,,,44,44,,29,,,56,,,,,,,,,56,,12,44,,,143,,143,,,,,,24,24,24', '24,,,,,24,24,24,24,24,24,,,,143,,143,,143,,,,24,,,,141,141,141,,12,', ',,12,12,,,,,,,,,,12,,,,29,,,,,,,24,138,,138,,138,24,138,,24,,57,,56', ',,,57,,,,12,12,,,,,,,24,,24,,,,24,24,143,56,143,,143,,,,57,57,57,,,', '138,24,,,,143,,,,,24,,24,,,,,,,12,,,,12,,24,24,,,57,,140,57,,140,,143', '140,24,140,24,,,,,,,29,,,56,,56,12,,,56,56,,,,28,,,,,,28,,,,,57,56,141', '141,141,141,,141,,57,56,69,,,12,,24,,,69,,,,28,28,28,,,,12,,,,,12,,', ',56,,56,,,,,,29,,,29,,,,,,,,,28,,,,,,24,,,,,140,,140,,140,,140,,,,,141', '141,141,141,,69,,69,56,69,,,69,,,57,,,,,,28,,,141,,,,,,28,,,,,,29,,', '140,57,24,,,,,,,24,,24,,,,,,24,,69,,,,,,24,,,,,,,,,,,,,,,,,,,,,,,,,', ',29,29,,,,,,,,,,,57,,57,,,,57,57,,24,56,,24,28,,,,56,24,,,,,57,,56,', ',,,24,,57,,24,69,,,28,29,29,,,,,,29,,,,,,,,,,,,,,57,,57,,,,,,,24,24', ',,,,24,24,,,24,,56,,,56,,,,,,,29,,,,29,29,,,,,28,,28,,,29,28,28,,57', '24,,,,,,,69,,,69,24,69,28,,,69,,,,,,28,24,24,,,29,29,,,,,,,,,29,,,,', ',,,,,,69,,28,69,28,,,,,,,,,,24,,,,,,24,,,,56,,24,24,29,,69,,29,24,,56', '29,,,,,,,,24,,,56,56,,,,28,,,,57,,,,,,29,57,,,,,,,,57,,,,24,,,24,,,', '24,24,,,,,,,,,,24,,29,69,,56,56,69,69,,,,56,,,,,29,,,,,29,,,29,29,,', ',24,,24,24,57,,,57,,,,,24,24,69,,,69,,,,,,,56,,,56,,,,56,56,,28,,,69', ',,,28,56,,,,,24,,28,,24,,,,24,,69,,24,,,,,,,,,,,,,,,56,56,,69,,,,,,', '56,24,,,,,,,,,,,,,,,,,,,,28,57,,28,,,69,,,,,,57,24,56,,,,56,,,,56,,57', '57,56,,24,,,,,24,,,24,24,,,,,,,,,,,,,,,56,,24,,,,,,,,,,,,,,,,,,,,,57', '57,,,,,,57,,,56,,,,,,,,,,,,,,,56,,28,,,56,,,56,56,,,,28,,,,,69,,,,,', '57,28,28,57,,,,57,57,,,,,,,,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,69,,,57', '57,28,28,,,,,28,28,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,57,,,,57,,28', ',57,28,35,,57,28,28,,,,,35,35,35,,,28,,,,,,,,35,35,35,,,,57,,,,,,,,', ',,35,,,,,,,28,28,,,,,,,,,28,,,,,57,,,,,,,,,,,,,,,57,,,,,57,,,57,57,', ',,,,28,,,,28,,,,28,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,28,,,,,28,,,28,28,35,35,35,,,,,35', '35,,,,,,,,,,,,,,,35,,,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35', '35,35,35,35,35,35,35,35,35,35,,,,,,,35,,,,,,35,,,35,,,,,,,35,,35,,35', ',,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,35,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,35,35,35,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,35,,,35,,35,,,,35,,,,,,,,,,,,35,,,,,,,,,35,35', ',,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,35', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,,,35,35,35,35,,,,', '35,35,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,35,', ',,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,35,,,,,,,,,,,', ',,,,,,,,,,35,,35,,,,,,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ] racc_goto_check = arr = ::Array.new(3110, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_goto_pointer = [ nil, 206, 23, 266, nil, 62, -2, 113, 72, 235, -281, 249, 358, -532, -629, -566, nil, 40, 237, 3, -206, 175, 5, 64, 927, -211, -347, 9, 1305, 781, -176, -36, -27, 47, -19, 2094, -26, nil, nil, 18, -167, 86, -230, -375, 110, -324, -650, nil, 123, 55, 63, -39, nil, -18, 21, -299, 999, 1204, -497, -219, -56, 5, nil, nil, 2, 38, -249, -6, -14, 1119, 99, -1, -270, 74, -10, -204, -255, -445, nil, nil, nil, nil, nil, nil, nil, nil, nil, 203, -68, -62, nil, 200, -332, -676, -474, -342, 199, -328, 31, -565, 214, 230, 230, -246, 231, 229, -436, 231, -437, -293, -839, 38, -628, -219, -611, -797, 77, -454, -215, -449, -716, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, -774, -470, -478, -774, -503, nil, 196, -401, 387, 365, -500, 232, -611, -517, nil, -537, -735, -820, -828, -172, -381, 105, -296, -16, -87, -488, nil, nil, -90, -487, -87, -484, -804, -400, -502, -627, nil, nil, 122, -30, 50, 118, 118, -256, -249, 123, 124, 128, -544, -387, -378, 145, -517, -310, nil, 0, -463, -325, -653, -263, -449, -627, nil, -637, -792, nil, nil, -110, -435 ] racc_goto_default = [ nil, nil, nil, nil, 5, nil, 295, 7, 348, 296, nil, nil, 536, nil, 855, nil, 294, nil, nil, nil, 14, 15, 21, 231, 324, nil, nil, 752, 229, 230, nil, nil, 20, nil, 332, 24, 25, 26, 27, nil, 694, nil, nil, nil, 313, nil, nil, 28, 424, 35, nil, nil, 37, 40, 39, nil, 226, 227, 600, nil, 132, 432, 131, 134, 78, 79, nil, 93, 49, 285, nil, 425, nil, 426, 437, 648, 499, 283, 268, 50, 51, 52, 53, 54, 55, 56, 57, 58, nil, 269, 64, nil, nil, nil, nil, nil, nil, nil, 584, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 724, 566, nil, 725, 954, 797, 554, nil, 555, nil, nil, 556, nil, 558, 664, nil, nil, nil, 564, nil, nil, nil, 762, nil, nil, nil, 436, 270, nil, nil, nil, nil, nil, nil, nil, nil, 77, 80, 82, nil, nil, nil, nil, nil, 610, nil, nil, nil, nil, nil, nil, nil, nil, 839, 553, nil, 557, 847, 569, 571, 572, 809, 575, 576, 810, 579, 582, nil, 289 ] racc_reduce_table = [ 0, 0, :racc_error, 0, 149, :_reduce_1, 2, 147, :_reduce_2, 2, 148, :_reduce_3, 1, 150, :_reduce_none, 1, 150, :_reduce_none, 3, 150, :_reduce_6, 2, 150, :_reduce_none, 1, 153, :_reduce_8, 0, 157, :_reduce_9, 5, 153, :_reduce_10, 4, 156, :_reduce_11, 2, 158, :_reduce_12, 1, 162, :_reduce_none, 1, 162, :_reduce_none, 3, 162, :_reduce_15, 2, 162, :_reduce_16, 0, 179, :_reduce_17, 4, 155, :_reduce_18, 3, 155, :_reduce_19, 3, 155, :_reduce_20, 3, 155, :_reduce_21, 2, 155, :_reduce_22, 3, 155, :_reduce_23, 3, 155, :_reduce_24, 3, 155, :_reduce_25, 3, 155, :_reduce_26, 3, 155, :_reduce_27, 4, 155, :_reduce_28, 1, 155, :_reduce_none, 3, 155, :_reduce_30, 3, 155, :_reduce_31, 6, 155, :_reduce_32, 5, 155, :_reduce_33, 5, 155, :_reduce_34, 5, 155, :_reduce_35, 5, 155, :_reduce_36, 3, 155, :_reduce_37, 3, 155, :_reduce_38, 3, 155, :_reduce_39, 1, 155, :_reduce_none, 3, 166, :_reduce_41, 3, 166, :_reduce_42, 1, 178, :_reduce_none, 3, 178, :_reduce_44, 3, 178, :_reduce_45, 3, 178, :_reduce_46, 2, 178, :_reduce_47, 1, 178, :_reduce_none, 1, 165, :_reduce_49, 1, 168, :_reduce_none, 1, 168, :_reduce_none, 1, 183, :_reduce_none, 4, 183, :_reduce_53, 0, 191, :_reduce_54, 0, 192, :_reduce_55, 6, 188, :_reduce_56, 1, 190, :_reduce_57, 2, 182, :_reduce_58, 3, 182, :_reduce_59, 4, 182, :_reduce_60, 5, 182, :_reduce_61, 4, 182, :_reduce_62, 5, 182, :_reduce_63, 2, 182, :_reduce_64, 2, 182, :_reduce_65, 2, 182, :_reduce_66, 2, 182, :_reduce_67, 2, 182, :_reduce_68, 1, 167, :_reduce_none, 3, 167, :_reduce_70, 1, 196, :_reduce_none, 3, 196, :_reduce_72, 1, 195, :_reduce_73, 2, 195, :_reduce_74, 3, 195, :_reduce_75, 5, 195, :_reduce_76, 2, 195, :_reduce_77, 4, 195, :_reduce_78, 2, 195, :_reduce_79, 4, 195, :_reduce_80, 1, 195, :_reduce_81, 3, 195, :_reduce_82, 1, 199, :_reduce_none, 3, 199, :_reduce_84, 2, 198, :_reduce_85, 3, 198, :_reduce_86, 1, 201, :_reduce_87, 3, 201, :_reduce_88, 1, 200, :_reduce_89, 1, 200, :_reduce_90, 4, 200, :_reduce_91, 3, 200, :_reduce_92, 3, 200, :_reduce_93, 3, 200, :_reduce_94, 3, 200, :_reduce_95, 2, 200, :_reduce_96, 1, 200, :_reduce_97, 1, 175, :_reduce_98, 1, 175, :_reduce_99, 4, 175, :_reduce_100, 3, 175, :_reduce_101, 3, 175, :_reduce_102, 3, 175, :_reduce_103, 3, 175, :_reduce_104, 2, 175, :_reduce_105, 1, 175, :_reduce_106, 1, 204, :_reduce_107, 1, 204, :_reduce_none, 2, 205, :_reduce_109, 1, 205, :_reduce_110, 3, 205, :_reduce_111, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_115, 1, 206, :_reduce_116, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 163, :_reduce_119, 1, 163, :_reduce_none, 1, 164, :_reduce_121, 0, 212, :_reduce_122, 4, 164, :_reduce_123, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 3, 181, :_reduce_195, 5, 181, :_reduce_196, 3, 181, :_reduce_197, 5, 181, :_reduce_198, 6, 181, :_reduce_199, 5, 181, :_reduce_200, 5, 181, :_reduce_201, 5, 181, :_reduce_202, 5, 181, :_reduce_203, 4, 181, :_reduce_204, 3, 181, :_reduce_205, 3, 181, :_reduce_206, 3, 181, :_reduce_207, 3, 181, :_reduce_208, 3, 181, :_reduce_209, 3, 181, :_reduce_210, 3, 181, :_reduce_211, 3, 181, :_reduce_212, 3, 181, :_reduce_213, 4, 181, :_reduce_214, 2, 181, :_reduce_215, 2, 181, :_reduce_216, 3, 181, :_reduce_217, 3, 181, :_reduce_218, 3, 181, :_reduce_219, 3, 181, :_reduce_220, 3, 181, :_reduce_221, 3, 181, :_reduce_222, 3, 181, :_reduce_223, 3, 181, :_reduce_224, 3, 181, :_reduce_225, 3, 181, :_reduce_226, 3, 181, :_reduce_227, 3, 181, :_reduce_228, 3, 181, :_reduce_229, 2, 181, :_reduce_230, 2, 181, :_reduce_231, 3, 181, :_reduce_232, 3, 181, :_reduce_233, 3, 181, :_reduce_234, 3, 181, :_reduce_235, 3, 181, :_reduce_236, 6, 181, :_reduce_237, 1, 181, :_reduce_none, 1, 215, :_reduce_239, 1, 216, :_reduce_none, 2, 216, :_reduce_241, 4, 216, :_reduce_242, 2, 216, :_reduce_243, 3, 220, :_reduce_244, 1, 221, :_reduce_none, 1, 221, :_reduce_none, 1, 171, :_reduce_247, 1, 171, :_reduce_248, 2, 171, :_reduce_249, 4, 171, :_reduce_250, 2, 171, :_reduce_251, 1, 194, :_reduce_252, 2, 194, :_reduce_253, 2, 194, :_reduce_254, 4, 194, :_reduce_255, 1, 194, :_reduce_256, 0, 224, :_reduce_257, 2, 187, :_reduce_258, 2, 223, :_reduce_259, 2, 222, :_reduce_260, 1, 222, :_reduce_none, 1, 217, :_reduce_262, 2, 217, :_reduce_263, 3, 217, :_reduce_264, 4, 217, :_reduce_265, 1, 177, :_reduce_266, 1, 177, :_reduce_267, 3, 176, :_reduce_268, 4, 176, :_reduce_269, 2, 176, :_reduce_270, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_281, 0, 247, :_reduce_282, 4, 214, :_reduce_283, 2, 214, :_reduce_284, 0, 248, :_reduce_285, 0, 249, :_reduce_286, 5, 214, :_reduce_287, 3, 214, :_reduce_288, 3, 214, :_reduce_289, 2, 214, :_reduce_290, 3, 214, :_reduce_291, 0, 250, :_reduce_292, 4, 214, :_reduce_293, 1, 214, :_reduce_294, 4, 214, :_reduce_295, 3, 214, :_reduce_296, 1, 214, :_reduce_297, 5, 214, :_reduce_298, 4, 214, :_reduce_299, 3, 214, :_reduce_300, 2, 214, :_reduce_301, 1, 214, :_reduce_none, 2, 214, :_reduce_303, 2, 214, :_reduce_304, 6, 214, :_reduce_305, 6, 214, :_reduce_306, 0, 251, :_reduce_307, 0, 252, :_reduce_308, 7, 214, :_reduce_309, 0, 253, :_reduce_310, 0, 254, :_reduce_311, 7, 214, :_reduce_312, 5, 214, :_reduce_313, 4, 214, :_reduce_314, 0, 255, :_reduce_315, 0, 256, :_reduce_316, 9, 214, :_reduce_317, 0, 257, :_reduce_318, 0, 258, :_reduce_319, 7, 214, :_reduce_320, 0, 259, :_reduce_321, 0, 260, :_reduce_322, 0, 261, :_reduce_323, 9, 214, :_reduce_324, 0, 262, :_reduce_325, 0, 263, :_reduce_326, 6, 214, :_reduce_327, 0, 264, :_reduce_328, 6, 214, :_reduce_329, 0, 265, :_reduce_330, 0, 266, :_reduce_331, 9, 214, :_reduce_332, 1, 214, :_reduce_333, 1, 214, :_reduce_334, 1, 214, :_reduce_335, 1, 214, :_reduce_336, 1, 170, :_reduce_337, 1, 267, :_reduce_none, 1, 268, :_reduce_none, 1, 269, :_reduce_none, 1, 270, :_reduce_none, 1, 271, :_reduce_none, 1, 272, :_reduce_none, 1, 273, :_reduce_none, 1, 274, :_reduce_none, 1, 275, :_reduce_none, 1, 276, :_reduce_none, 1, 277, :_reduce_none, 1, 238, :_reduce_none, 1, 238, :_reduce_none, 2, 238, :_reduce_none, 1, 240, :_reduce_none, 1, 240, :_reduce_none, 1, 239, :_reduce_none, 5, 239, :_reduce_355, 1, 160, :_reduce_none, 2, 160, :_reduce_357, 1, 242, :_reduce_none, 1, 242, :_reduce_359, 1, 278, :_reduce_none, 3, 278, :_reduce_361, 1, 281, :_reduce_362, 3, 281, :_reduce_363, 1, 280, :_reduce_364, 4, 280, :_reduce_365, 6, 280, :_reduce_366, 3, 280, :_reduce_367, 5, 280, :_reduce_368, 2, 280, :_reduce_369, 4, 280, :_reduce_370, 1, 280, :_reduce_371, 3, 280, :_reduce_372, 4, 282, :_reduce_373, 2, 282, :_reduce_374, 2, 282, :_reduce_375, 1, 282, :_reduce_376, 2, 287, :_reduce_377, 1, 287, :_reduce_none, 6, 288, :_reduce_379, 8, 288, :_reduce_380, 4, 288, :_reduce_381, 6, 288, :_reduce_382, 4, 288, :_reduce_383, 2, 288, :_reduce_384, 6, 288, :_reduce_385, 2, 288, :_reduce_386, 4, 288, :_reduce_387, 6, 288, :_reduce_388, 2, 288, :_reduce_389, 4, 288, :_reduce_390, 2, 288, :_reduce_391, 4, 288, :_reduce_392, 1, 288, :_reduce_393, 1, 189, :_reduce_394, 1, 189, :_reduce_none, 3, 292, :_reduce_396, 1, 292, :_reduce_397, 4, 292, :_reduce_398, 1, 293, :_reduce_none, 4, 293, :_reduce_400, 1, 294, :_reduce_401, 3, 294, :_reduce_402, 1, 295, :_reduce_403, 1, 295, :_reduce_none, 0, 299, :_reduce_405, 3, 237, :_reduce_406, 4, 297, :_reduce_407, 1, 297, :_reduce_408, 3, 298, :_reduce_409, 3, 298, :_reduce_410, 0, 302, :_reduce_411, 0, 303, :_reduce_412, 6, 301, :_reduce_413, 2, 184, :_reduce_414, 4, 184, :_reduce_415, 5, 184, :_reduce_416, 5, 184, :_reduce_417, 0, 305, :_reduce_418, 3, 236, :_reduce_419, 4, 236, :_reduce_420, 4, 236, :_reduce_421, 3, 236, :_reduce_422, 3, 236, :_reduce_423, 3, 236, :_reduce_424, 2, 236, :_reduce_425, 1, 236, :_reduce_426, 4, 236, :_reduce_427, 0, 306, :_reduce_428, 0, 307, :_reduce_429, 6, 235, :_reduce_430, 0, 308, :_reduce_431, 0, 309, :_reduce_432, 6, 235, :_reduce_433, 0, 311, :_reduce_434, 6, 241, :_reduce_435, 1, 310, :_reduce_none, 1, 310, :_reduce_none, 6, 159, :_reduce_438, 0, 159, :_reduce_439, 1, 312, :_reduce_440, 1, 312, :_reduce_none, 1, 312, :_reduce_none, 2, 313, :_reduce_443, 1, 313, :_reduce_none, 2, 161, :_reduce_445, 1, 161, :_reduce_none, 1, 225, :_reduce_447, 1, 225, :_reduce_448, 1, 225, :_reduce_none, 1, 226, :_reduce_450, 1, 315, :_reduce_451, 1, 315, :_reduce_none, 2, 315, :_reduce_453, 3, 316, :_reduce_454, 1, 316, :_reduce_455, 3, 227, :_reduce_456, 3, 228, :_reduce_457, 3, 229, :_reduce_458, 3, 229, :_reduce_459, 1, 320, :_reduce_460, 3, 320, :_reduce_461, 1, 321, :_reduce_none, 2, 321, :_reduce_463, 3, 231, :_reduce_464, 3, 231, :_reduce_465, 1, 323, :_reduce_466, 3, 323, :_reduce_467, 3, 230, :_reduce_468, 3, 230, :_reduce_469, 3, 232, :_reduce_470, 3, 232, :_reduce_471, 1, 324, :_reduce_472, 3, 324, :_reduce_473, 1, 325, :_reduce_474, 3, 325, :_reduce_475, 1, 317, :_reduce_476, 2, 317, :_reduce_477, 1, 318, :_reduce_478, 2, 318, :_reduce_479, 1, 319, :_reduce_480, 2, 319, :_reduce_481, 1, 322, :_reduce_482, 0, 327, :_reduce_483, 3, 322, :_reduce_484, 0, 328, :_reduce_485, 4, 322, :_reduce_486, 1, 326, :_reduce_487, 1, 326, :_reduce_488, 1, 326, :_reduce_489, 1, 326, :_reduce_none, 2, 210, :_reduce_491, 1, 210, :_reduce_492, 1, 329, :_reduce_none, 1, 329, :_reduce_none, 1, 329, :_reduce_none, 1, 329, :_reduce_none, 3, 211, :_reduce_497, 1, 314, :_reduce_none, 2, 314, :_reduce_499, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 203, :_reduce_509, 1, 203, :_reduce_510, 1, 203, :_reduce_511, 1, 203, :_reduce_512, 1, 203, :_reduce_513, 1, 203, :_reduce_514, 1, 203, :_reduce_515, 1, 233, :_reduce_516, 1, 233, :_reduce_517, 1, 169, :_reduce_518, 1, 169, :_reduce_519, 1, 174, :_reduce_520, 1, 174, :_reduce_521, 1, 243, :_reduce_522, 0, 330, :_reduce_523, 4, 243, :_reduce_524, 2, 243, :_reduce_525, 3, 245, :_reduce_526, 2, 245, :_reduce_527, 4, 331, :_reduce_528, 2, 331, :_reduce_529, 2, 331, :_reduce_530, 1, 331, :_reduce_none, 2, 333, :_reduce_532, 0, 333, :_reduce_533, 6, 300, :_reduce_534, 8, 300, :_reduce_535, 4, 300, :_reduce_536, 6, 300, :_reduce_537, 4, 300, :_reduce_538, 6, 300, :_reduce_539, 2, 300, :_reduce_540, 4, 300, :_reduce_541, 6, 300, :_reduce_542, 2, 300, :_reduce_543, 4, 300, :_reduce_544, 2, 300, :_reduce_545, 4, 300, :_reduce_546, 1, 300, :_reduce_547, 0, 300, :_reduce_548, 1, 296, :_reduce_549, 1, 296, :_reduce_550, 1, 296, :_reduce_551, 1, 296, :_reduce_552, 1, 279, :_reduce_none, 1, 279, :_reduce_554, 1, 335, :_reduce_none, 1, 336, :_reduce_none, 3, 336, :_reduce_557, 1, 289, :_reduce_558, 3, 289, :_reduce_559, 1, 337, :_reduce_none, 2, 338, :_reduce_561, 1, 338, :_reduce_562, 2, 339, :_reduce_563, 1, 339, :_reduce_564, 1, 283, :_reduce_none, 3, 283, :_reduce_566, 1, 332, :_reduce_none, 3, 332, :_reduce_568, 1, 340, :_reduce_none, 1, 340, :_reduce_none, 2, 284, :_reduce_571, 1, 284, :_reduce_572, 3, 341, :_reduce_573, 3, 342, :_reduce_574, 1, 290, :_reduce_575, 3, 290, :_reduce_576, 1, 334, :_reduce_577, 3, 334, :_reduce_578, 1, 343, :_reduce_none, 1, 343, :_reduce_none, 2, 291, :_reduce_581, 1, 291, :_reduce_582, 1, 344, :_reduce_none, 1, 344, :_reduce_none, 2, 286, :_reduce_585, 2, 285, :_reduce_586, 0, 285, :_reduce_587, 1, 246, :_reduce_none, 0, 345, :_reduce_589, 4, 246, :_reduce_590, 1, 234, :_reduce_591, 2, 234, :_reduce_592, 1, 219, :_reduce_none, 3, 219, :_reduce_594, 3, 346, :_reduce_595, 3, 346, :_reduce_596, 4, 346, :_reduce_597, 2, 346, :_reduce_598, 2, 346, :_reduce_599, 1, 193, :_reduce_none, 1, 193, :_reduce_none, 1, 193, :_reduce_none, 1, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 304, :_reduce_none, 1, 304, :_reduce_none, 1, 304, :_reduce_none, 1, 185, :_reduce_none, 1, 185, :_reduce_none, 1, 173, :_reduce_none, 1, 173, :_reduce_none, 0, 151, :_reduce_none, 1, 151, :_reduce_none, 0, 180, :_reduce_none, 1, 180, :_reduce_none, 2, 197, :_reduce_none, 2, 172, :_reduce_none, 0, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 244, :_reduce_623, 1, 244, :_reduce_none, 1, 154, :_reduce_none, 2, 154, :_reduce_626, 0, 152, :_reduce_627 ] racc_reduce_n = 628 racc_shift_n = 1059 racc_token_table = { false => 0, :error => 1, :kCLASS => 2, :kMODULE => 3, :kDEF => 4, :kUNDEF => 5, :kBEGIN => 6, :kRESCUE => 7, :kENSURE => 8, :kEND => 9, :kIF => 10, :kUNLESS => 11, :kTHEN => 12, :kELSIF => 13, :kELSE => 14, :kCASE => 15, :kWHEN => 16, :kWHILE => 17, :kUNTIL => 18, :kFOR => 19, :kBREAK => 20, :kNEXT => 21, :kREDO => 22, :kRETRY => 23, :kIN => 24, :kDO => 25, :kDO_COND => 26, :kDO_BLOCK => 27, :kDO_LAMBDA => 28, :kRETURN => 29, :kYIELD => 30, :kSUPER => 31, :kSELF => 32, :kNIL => 33, :kTRUE => 34, :kFALSE => 35, :kAND => 36, :kOR => 37, :kNOT => 38, :kIF_MOD => 39, :kUNLESS_MOD => 40, :kWHILE_MOD => 41, :kUNTIL_MOD => 42, :kRESCUE_MOD => 43, :kALIAS => 44, :kDEFINED => 45, :klBEGIN => 46, :klEND => 47, :k__LINE__ => 48, :k__FILE__ => 49, :k__ENCODING__ => 50, :tIDENTIFIER => 51, :tFID => 52, :tGVAR => 53, :tIVAR => 54, :tCONSTANT => 55, :tLABEL => 56, :tCVAR => 57, :tNTH_REF => 58, :tBACK_REF => 59, :tSTRING_CONTENT => 60, :tINTEGER => 61, :tFLOAT => 62, :tREGEXP_END => 63, :tUPLUS => 64, :tUMINUS => 65, :tUMINUS_NUM => 66, :tPOW => 67, :tCMP => 68, :tEQ => 69, :tEQQ => 70, :tNEQ => 71, :tGEQ => 72, :tLEQ => 73, :tANDOP => 74, :tOROP => 75, :tMATCH => 76, :tNMATCH => 77, :tDOT => 78, :tDOT2 => 79, :tDOT3 => 80, :tAREF => 81, :tASET => 82, :tLSHFT => 83, :tRSHFT => 84, :tCOLON2 => 85, :tCOLON3 => 86, :tOP_ASGN => 87, :tASSOC => 88, :tLPAREN => 89, :tLPAREN2 => 90, :tRPAREN => 91, :tLPAREN_ARG => 92, :tLBRACK => 93, :tLBRACK2 => 94, :tRBRACK => 95, :tLBRACE => 96, :tLBRACE_ARG => 97, :tSTAR => 98, :tSTAR2 => 99, :tAMPER => 100, :tAMPER2 => 101, :tTILDE => 102, :tPERCENT => 103, :tDIVIDE => 104, :tPLUS => 105, :tMINUS => 106, :tLT => 107, :tGT => 108, :tPIPE => 109, :tBANG => 110, :tCARET => 111, :tLCURLY => 112, :tRCURLY => 113, :tBACK_REF2 => 114, :tSYMBEG => 115, :tSTRING_BEG => 116, :tXSTRING_BEG => 117, :tREGEXP_BEG => 118, :tWORDS_BEG => 119, :tQWORDS_BEG => 120, :tSTRING_DBEG => 121, :tSTRING_DVAR => 122, :tSTRING_END => 123, :tSTRING => 124, :tSYMBOL => 125, :tNL => 126, :tEH => 127, :tCOLON => 128, :tCOMMA => 129, :tSPACE => 130, :tSEMI => 131, :tLAMBDA => 132, :tLAMBEG => 133, :tDSTAR => 134, :tCHAR => 135, :tSYMBOLS_BEG => 136, :tQSYMBOLS_BEG => 137, :tSTRING_DEND => 138, :tUBANG => 139, :tRATIONAL => 140, :tIMAGINARY => 141, :tLABEL_END => 142, :tLONELY => 143, :tEQL => 144, :tLOWEST => 145 } racc_nt_base = 146 racc_use_result_var = true Racc_arg = [ racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var ] Racc_token_to_s_table = [ "$end", "error", "kCLASS", "kMODULE", "kDEF", "kUNDEF", "kBEGIN", "kRESCUE", "kENSURE", "kEND", "kIF", "kUNLESS", "kTHEN", "kELSIF", "kELSE", "kCASE", "kWHEN", "kWHILE", "kUNTIL", "kFOR", "kBREAK", "kNEXT", "kREDO", "kRETRY", "kIN", "kDO", "kDO_COND", "kDO_BLOCK", "kDO_LAMBDA", "kRETURN", "kYIELD", "kSUPER", "kSELF", "kNIL", "kTRUE", "kFALSE", "kAND", "kOR", "kNOT", "kIF_MOD", "kUNLESS_MOD", "kWHILE_MOD", "kUNTIL_MOD", "kRESCUE_MOD", "kALIAS", "kDEFINED", "klBEGIN", "klEND", "k__LINE__", "k__FILE__", "k__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tLABEL", "tCVAR", "tNTH_REF", "tBACK_REF", "tSTRING_CONTENT", "tINTEGER", "tFLOAT", "tREGEXP_END", "tUPLUS", "tUMINUS", "tUMINUS_NUM", "tPOW", "tCMP", "tEQ", "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", "tDOT", "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN2", "tRPAREN", "tLPAREN_ARG", "tLBRACK", "tLBRACK2", "tRBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tSTAR2", "tAMPER", "tAMPER2", "tTILDE", "tPERCENT", "tDIVIDE", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tDSTAR", "tCHAR", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DEND", "tUBANG", "tRATIONAL", "tIMAGINARY", "tLABEL_END", "tLONELY", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "@1", "top_stmts", "opt_terms", "none", "top_stmt", "terms", "stmt", "bodystmt", "@2", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", "lhs", "mrhs", "mrhs_arg", "expr", "@3", "opt_nl", "arg", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "fcall", "@4", "@5", "operation", "call_args", "mlhs_basic", "mlhs_inner", "rparen", "mlhs_head", "mlhs_item", "mlhs_node", "mlhs_post", "user_variable", "keyword_variable", "cname", "cpath", "fname", "op", "reswords", "fsym", "symbol", "dsym", "@6", "simple_numeric", "primary", "arg_value", "aref_args", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@7", "literal", "strings", "xstring", "regexp", "words", "qwords", "symbols", "qsymbols", "var_ref", "assoc_list", "brace_block", "method_call", "lambda", "then", "if_tail", "do", "case_body", "for_var", "superclass", "term", "f_arglist", "singleton", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23", "@24", "@25", "@26", "@27", "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "f_marg", "f_norm_arg", "f_margs", "f_marg_list", "block_args_tail", "f_block_kwarg", "f_kwrest", "opt_f_block_arg", "f_block_arg", "opt_block_args_tail", "block_param", "f_arg", "f_block_optarg", "f_rest_arg", "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "f_bad_arg", "f_larglist", "lambda_body", "@28", "f_args", "do_block", "@29", "@30", "operation3", "@31", "@32", "@33", "@34", "@35", "cases", "@36", "exc_list", "exc_var", "numeric", "string", "string1", "string_contents", "xstring_contents", "regexp_contents", "word_list", "word", "string_content", "symbol_list", "qword_list", "qsym_list", "string_dvar", "@37", "@38", "sym", "@39", "args_tail", "f_kwarg", "opt_args_tail", "f_optarg", "f_arg_asgn", "f_arg_item", "f_label", "f_kw", "f_block_kw", "kwrest_mark", "f_opt", "f_block_opt", "restarg_mark", "blkarg_mark", "@40", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted def _reduce_1(val, _values, result) self.lexer.lex_state = :expr_beg result end def _reduce_2(val, _values, result) result = new_compstmt val result end def _reduce_3(val, _values, result) result = val[0] result end # reduce 4 omitted # reduce 5 omitted def _reduce_6(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = val[0] # TODO: remove once I have more confidence this is fixed # result.each_of_type :call_args do |s| # debug20 666, s, result # end result end def _reduce_9(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 1 yyerror "BEGIN in method" end self.env.extend result end def _reduce_10(val, _values, result) result = new_iter s(:preexe), nil, val[3] result end def _reduce_11(val, _values, result) result = new_body val result end def _reduce_12(val, _values, result) result = new_compstmt val result end # reduce 13 omitted # reduce 14 omitted def _reduce_15(val, _values, result) result = self.block_append val[0], val[2] result end def _reduce_16(val, _values, result) result = val[1] debug20 2, val, result result end def _reduce_17(val, _values, result) lexer.lex_state = :expr_fname result = self.lexer.lineno result end def _reduce_18(val, _values, result) result = s(:alias, val[1], val[3]).line(val[2]) result end def _reduce_19(val, _values, result) result = s(:valias, val[1].to_sym, val[2].to_sym) result end def _reduce_20(val, _values, result) result = s(:valias, val[1].to_sym, :"$#{val[2]}") result end def _reduce_21(val, _values, result) yyerror "can't make alias for the number variables" result end def _reduce_22(val, _values, result) result = val[1] result end def _reduce_23(val, _values, result) result = new_if val[2], val[0], nil result end def _reduce_24(val, _values, result) result = new_if val[2], nil, val[0] result end def _reduce_25(val, _values, result) result = new_while val[0], val[2], true result end def _reduce_26(val, _values, result) result = new_until val[0], val[2], true result end def _reduce_27(val, _values, result) result = s(:rescue, val[0], new_resbody(s(:array), val[2])) result end def _reduce_28(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] result end # reduce 29 omitted def _reduce_30(val, _values, result) result = new_masgn val[0], val[2], :wrap result end def _reduce_31(val, _values, result) result = new_op_asgn val result end def _reduce_32(val, _values, result) result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_33(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line result end def _reduce_34(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line result end def _reduce_35(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 4, val, result result end def _reduce_36(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 5, val, result result end def _reduce_37(val, _values, result) self.backref_assign_error val[0] result end def _reduce_38(val, _values, result) result = new_assign val[0], s(:svalue, val[2]) result end def _reduce_39(val, _values, result) result = new_masgn val[0], val[2] result end # reduce 40 omitted def _reduce_41(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_42(val, _values, result) result = new_assign val[0], val[2] result end # reduce 43 omitted def _reduce_44(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_45(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_46(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_47(val, _values, result) result = s(:call, val[1], :"!") result end # reduce 48 omitted def _reduce_49(val, _values, result) result = value_expr(val[0]) result end # reduce 50 omitted # reduce 51 omitted # reduce 52 omitted def _reduce_53(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_54(val, _values, result) self.env.extend(:dynamic) result = self.lexer.lineno result end def _reduce_55(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_56(val, _values, result) result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend result end def _reduce_57(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_58(val, _values, result) result = val[0].concat val[1].sexp_body # REFACTOR pattern result end def _reduce_59(val, _values, result) result = val[0].concat val[1].sexp_body if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end result end def _reduce_60(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_61(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] block_dup_check call, block block.insert 1, call result = block result end def _reduce_62(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_63(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block result end def _reduce_64(val, _values, result) result = new_super val[1] result end def _reduce_65(val, _values, result) result = new_yield val[1] result end def _reduce_66(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) result end def _reduce_67(val, _values, result) line = val[0].last result = s(:break, ret_args(val[1])).line(line) result end def _reduce_68(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) result end # reduce 69 omitted def _reduce_70(val, _values, result) result = val[1] result end # reduce 71 omitted def _reduce_72(val, _values, result) result = s(:masgn, s(:array, val[1])) result end def _reduce_73(val, _values, result) result = s(:masgn, val[0]) result end def _reduce_74(val, _values, result) result = s(:masgn, val[0] << val[1].compact) result end def _reduce_75(val, _values, result) result = s(:masgn, val[0] << s(:splat, val[2])) result end def _reduce_76(val, _values, result) ary1, _, splat, _, ary2 = val result = list_append ary1, s(:splat, splat) result.concat ary2.sexp_body result = s(:masgn, result) result end def _reduce_77(val, _values, result) result = s(:masgn, val[0] << s(:splat)) result end def _reduce_78(val, _values, result) ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_79(val, _values, result) result = s(:masgn, s(:array, s(:splat, val[1]))) result end def _reduce_80(val, _values, result) ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_81(val, _values, result) result = s(:masgn, s(:array, s(:splat))) result end def _reduce_82(val, _values, result) result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) result end # reduce 83 omitted def _reduce_84(val, _values, result) result = val[1] result end def _reduce_85(val, _values, result) result = s(:array, val[0]) result end def _reduce_86(val, _values, result) result = val[0] << val[1].compact result end def _reduce_87(val, _values, result) result = s(:array, val[0]) result end def _reduce_88(val, _values, result) result = list_append val[0], val[2] result end def _reduce_89(val, _values, result) result = self.assignable val[0] result end def _reduce_90(val, _values, result) result = self.assignable val[0] result end def _reduce_91(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_92(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_93(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_94(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_95(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) result end def _reduce_96(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) result end def _reduce_97(val, _values, result) self.backref_assign_error val[0] result end def _reduce_98(val, _values, result) result = self.assignable val[0] result end def _reduce_99(val, _values, result) result = self.assignable val[0] debug20 9, val, result result end def _reduce_100(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_101(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_102(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_103(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_104(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) result end def _reduce_105(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) result end def _reduce_106(val, _values, result) self.backref_assign_error val[0] result end def _reduce_107(val, _values, result) yyerror "class/module name must be CONSTANT" result end # reduce 108 omitted def _reduce_109(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_110(val, _values, result) result = val[0].to_sym result end def _reduce_111(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end # reduce 112 omitted # reduce 113 omitted # reduce 114 omitted def _reduce_115(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end def _reduce_116(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end # reduce 117 omitted # reduce 118 omitted def _reduce_119(val, _values, result) result = s(:lit, val[0].to_sym) result end # reduce 120 omitted def _reduce_121(val, _values, result) result = new_undef val[0] result end def _reduce_122(val, _values, result) lexer.lex_state = :expr_fname result end def _reduce_123(val, _values, result) result = new_undef val[0], val[3] result end # reduce 124 omitted # reduce 125 omitted # reduce 126 omitted # reduce 127 omitted # reduce 128 omitted # reduce 129 omitted # reduce 130 omitted # reduce 131 omitted # reduce 132 omitted # reduce 133 omitted # reduce 134 omitted # reduce 135 omitted # reduce 136 omitted # reduce 137 omitted # reduce 138 omitted # reduce 139 omitted # reduce 140 omitted # reduce 141 omitted # reduce 142 omitted # reduce 143 omitted # reduce 144 omitted # reduce 145 omitted # reduce 146 omitted # reduce 147 omitted # reduce 148 omitted # reduce 149 omitted # reduce 150 omitted # reduce 151 omitted # reduce 152 omitted # reduce 153 omitted # reduce 154 omitted # reduce 155 omitted # reduce 156 omitted # reduce 157 omitted # reduce 158 omitted # reduce 159 omitted # reduce 160 omitted # reduce 161 omitted # reduce 162 omitted # reduce 163 omitted # reduce 164 omitted # reduce 165 omitted # reduce 166 omitted # reduce 167 omitted # reduce 168 omitted # reduce 169 omitted # reduce 170 omitted # reduce 171 omitted # reduce 172 omitted # reduce 173 omitted # reduce 174 omitted # reduce 175 omitted # reduce 176 omitted # reduce 177 omitted # reduce 178 omitted # reduce 179 omitted # reduce 180 omitted # reduce 181 omitted # reduce 182 omitted # reduce 183 omitted # reduce 184 omitted # reduce 185 omitted # reduce 186 omitted # reduce 187 omitted # reduce 188 omitted # reduce 189 omitted # reduce 190 omitted # reduce 191 omitted # reduce 192 omitted # reduce 193 omitted # reduce 194 omitted def _reduce_195(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_196(val, _values, result) result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) result end def _reduce_197(val, _values, result) result = new_op_asgn val result end def _reduce_198(val, _values, result) result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) result end def _reduce_199(val, _values, result) val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_200(val, _values, result) result = new_op_asgn2 val result end def _reduce_201(val, _values, result) result = new_op_asgn2 val result end def _reduce_202(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) result end def _reduce_203(val, _values, result) yyerror "constant re-assignment" result end def _reduce_204(val, _values, result) yyerror "constant re-assignment" result end def _reduce_205(val, _values, result) self.backref_assign_error val[0] result end def _reduce_206(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end result end def _reduce_207(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end result end def _reduce_208(val, _values, result) result = new_call val[0], :+, argl(val[2]) result end def _reduce_209(val, _values, result) result = new_call val[0], :-, argl(val[2]) result end def _reduce_210(val, _values, result) result = new_call val[0], :*, argl(val[2]) result end def _reduce_211(val, _values, result) result = new_call val[0], :"/", argl(val[2]) result end def _reduce_212(val, _values, result) result = new_call val[0], :"%", argl(val[2]) result end def _reduce_213(val, _values, result) result = new_call val[0], :**, argl(val[2]) result end def _reduce_214(val, _values, result) result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") result end def _reduce_215(val, _values, result) result = new_call val[1], :"+@" result end def _reduce_216(val, _values, result) result = new_call val[1], :"-@" result end def _reduce_217(val, _values, result) result = new_call val[0], :"|", argl(val[2]) result end def _reduce_218(val, _values, result) result = new_call val[0], :"^", argl(val[2]) result end def _reduce_219(val, _values, result) result = new_call val[0], :"&", argl(val[2]) result end def _reduce_220(val, _values, result) result = new_call val[0], :"<=>", argl(val[2]) result end def _reduce_221(val, _values, result) result = new_call val[0], :">", argl(val[2]) result end def _reduce_222(val, _values, result) result = new_call val[0], :">=", argl(val[2]) result end def _reduce_223(val, _values, result) result = new_call val[0], :"<", argl(val[2]) result end def _reduce_224(val, _values, result) result = new_call val[0], :"<=", argl(val[2]) result end def _reduce_225(val, _values, result) result = new_call val[0], :"==", argl(val[2]) result end def _reduce_226(val, _values, result) result = new_call val[0], :"===", argl(val[2]) result end def _reduce_227(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) result end def _reduce_228(val, _values, result) result = new_match val[0], val[2] result end def _reduce_229(val, _values, result) result = s(:not, new_match(val[0], val[2])) result end def _reduce_230(val, _values, result) result = new_call val[1], :"!" result end def _reduce_231(val, _values, result) result = new_call value_expr(val[1]), :"~" result end def _reduce_232(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) result end def _reduce_233(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) result end def _reduce_234(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_235(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_236(val, _values, result) result = s(:defined, val[2]) result end def _reduce_237(val, _values, result) result = s(:if, val[0], val[2], val[5]) result end # reduce 238 omitted def _reduce_239(val, _values, result) result = value_expr(val[0]) result end # reduce 240 omitted def _reduce_241(val, _values, result) result = args [val[0]] result end def _reduce_242(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_243(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_244(val, _values, result) result = val[1] result end # reduce 245 omitted # reduce 246 omitted def _reduce_247(val, _values, result) result = val[0] result end def _reduce_248(val, _values, result) result = val[0] result end def _reduce_249(val, _values, result) result = args val result end def _reduce_250(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_251(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_252(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val result end def _reduce_253(val, _values, result) result = call_args val result = self.arg_blk_pass val[0], val[1] result end def _reduce_254(val, _values, result) result = call_args [array_to_hash(val[0])] result = self.arg_blk_pass result, val[1] result end def _reduce_255(val, _values, result) result = call_args [val[0], array_to_hash(val[2])] result = self.arg_blk_pass result, val[3] result end def _reduce_256(val, _values, result) result = call_args val result end def _reduce_257(val, _values, result) result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true result end def _reduce_258(val, _values, result) lexer.cmdarg.stack.replace val[0] result = val[1] result end def _reduce_259(val, _values, result) result = s(:block_pass, val[1]) result end def _reduce_260(val, _values, result) result = val[1] result end # reduce 261 omitted def _reduce_262(val, _values, result) result = s(:array, val[0]) result end def _reduce_263(val, _values, result) result = s(:array, s(:splat, val[1])) result end def _reduce_264(val, _values, result) result = self.list_append val[0], val[2] result end def _reduce_265(val, _values, result) result = self.list_append val[0], s(:splat, val[3]) result end def _reduce_266(val, _values, result) result = new_masgn_arg val[0] result end def _reduce_267(val, _values, result) result = new_masgn_arg val[0], :wrap result end def _reduce_268(val, _values, result) result = val[0] << val[2] result end def _reduce_269(val, _values, result) result = self.arg_concat val[0], val[3] result end def _reduce_270(val, _values, result) result = s(:splat, val[1]) result end # reduce 271 omitted # reduce 272 omitted # reduce 273 omitted # reduce 274 omitted # reduce 275 omitted # reduce 276 omitted # reduce 277 omitted # reduce 278 omitted # reduce 279 omitted # reduce 280 omitted def _reduce_281(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_282(val, _values, result) result = self.lexer.lineno result end def _reduce_283(val, _values, result) unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] result end def _reduce_284(val, _values, result) debug20 13, val, result result end def _reduce_285(val, _values, result) result = self.lexer.cmdarg.stack.dup lexer.cmdarg.stack.replace [false] # TODO add api for these result end def _reduce_286(val, _values, result) lexer.lex_state = :expr_endarg result end def _reduce_287(val, _values, result) warning "(...) interpreted as grouped expression" lexer.cmdarg.stack.replace val[1] result = val[2] result end def _reduce_288(val, _values, result) result = val[1] || s(:nil) result.paren = true result end def _reduce_289(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end def _reduce_290(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_291(val, _values, result) result = val[1] || s(:array) result.sexp_type = :array # aref_args is :args result end def _reduce_292(val, _values, result) result = self.lexer.lineno result end def _reduce_293(val, _values, result) result = new_hash val result end def _reduce_294(val, _values, result) result = s(:return) result end def _reduce_295(val, _values, result) result = new_yield val[2] result end def _reduce_296(val, _values, result) result = new_yield result end def _reduce_297(val, _values, result) result = new_yield result end def _reduce_298(val, _values, result) result = s(:defined, val[3]) result end def _reduce_299(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_300(val, _values, result) debug20 14, val, result result end def _reduce_301(val, _values, result) oper, iter = val[0], val[1] call = oper # FIX iter.insert 1, call result = iter call.line = iter.line result end # reduce 302 omitted def _reduce_303(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter result end def _reduce_304(val, _values, result) result = val[1] # TODO: fix lineno result end def _reduce_305(val, _values, result) result = new_if val[1], val[3], val[4] result end def _reduce_306(val, _values, result) result = new_if val[1], val[4], val[3] result end def _reduce_307(val, _values, result) lexer.cond.push true result end def _reduce_308(val, _values, result) lexer.cond.pop result end def _reduce_309(val, _values, result) result = new_while val[5], val[2], true result end def _reduce_310(val, _values, result) lexer.cond.push true result end def _reduce_311(val, _values, result) lexer.cond.pop result end def _reduce_312(val, _values, result) result = new_until val[5], val[2], true result end def _reduce_313(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_314(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_315(val, _values, result) lexer.cond.push true result end def _reduce_316(val, _values, result) lexer.cond.pop result end def _reduce_317(val, _values, result) result = new_for val[4], val[1], val[7] result end def _reduce_318(val, _values, result) result = self.lexer.lineno result end def _reduce_319(val, _values, result) self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend result end def _reduce_320(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_321(val, _values, result) result = self.lexer.lineno result end def _reduce_322(val, _values, result) result = self.in_def self.in_def = false result end def _reduce_323(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend result end def _reduce_324(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_325(val, _values, result) result = self.lexer.lineno result end def _reduce_326(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend result end def _reduce_327(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_328(val, _values, result) result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend # TODO: local->cmdargs = cmdarg_stack; # TODO: port local_push_gen and local_pop_gen lexer.cmdarg.stack.replace [false] result end def _reduce_329(val, _values, result) in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body result end def _reduce_330(val, _values, result) self.comments.push self.lexer.comments lexer.lex_state = :expr_fname result end def _reduce_331(val, _values, result) self.in_single += 1 self.env.extend lexer.lex_state = :expr_endfn # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] result end def _reduce_332(val, _values, result) line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body result end def _reduce_333(val, _values, result) result = s(:break) result end def _reduce_334(val, _values, result) result = s(:next) result end def _reduce_335(val, _values, result) result = s(:redo) result end def _reduce_336(val, _values, result) result = s(:retry) result end def _reduce_337(val, _values, result) result = value_expr(val[0]) result end # reduce 338 omitted # reduce 339 omitted # reduce 340 omitted # reduce 341 omitted # reduce 342 omitted # reduce 343 omitted # reduce 344 omitted # reduce 345 omitted # reduce 346 omitted # reduce 347 omitted # reduce 348 omitted # reduce 349 omitted # reduce 350 omitted # reduce 351 omitted # reduce 352 omitted # reduce 353 omitted # reduce 354 omitted def _reduce_355(val, _values, result) result = s(:if, val[1], val[3], val[4]) result end # reduce 356 omitted def _reduce_357(val, _values, result) result = val[1] result end # reduce 358 omitted def _reduce_359(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end # reduce 360 omitted def _reduce_361(val, _values, result) result = val[1] result end def _reduce_362(val, _values, result) result = s(:array, val[0]) result end def _reduce_363(val, _values, result) result = list_append val[0], val[2] result end def _reduce_364(val, _values, result) args, = val result = block_var args result end def _reduce_365(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym result end def _reduce_366(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 result end def _reduce_367(val, _values, result) args, _, _ = val result = block_var args, :* result end def _reduce_368(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 result end def _reduce_369(val, _values, result) _, splat = val result = block_var :"*#{splat}" result end def _reduce_370(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args result end def _reduce_371(val, _values, result) result = block_var :* result end def _reduce_372(val, _values, result) _, _, args = val result = block_var :*, args result end def _reduce_373(val, _values, result) result = call_args val result end def _reduce_374(val, _values, result) result = call_args val result end def _reduce_375(val, _values, result) result = call_args val result end def _reduce_376(val, _values, result) result = call_args val result end def _reduce_377(val, _values, result) result = args val result end # reduce 378 omitted def _reduce_379(val, _values, result) result = args val result end def _reduce_380(val, _values, result) result = args val result end def _reduce_381(val, _values, result) result = args val result end def _reduce_382(val, _values, result) result = args val result end def _reduce_383(val, _values, result) result = args val result end def _reduce_384(val, _values, result) result = args val result end def _reduce_385(val, _values, result) result = args val result end def _reduce_386(val, _values, result) result = args val result end def _reduce_387(val, _values, result) result = args val result end def _reduce_388(val, _values, result) result = args val result end def _reduce_389(val, _values, result) result = args val result end def _reduce_390(val, _values, result) result = args val result end def _reduce_391(val, _values, result) result = args val result end def _reduce_392(val, _values, result) result = args val result end def _reduce_393(val, _values, result) result = args val result end def _reduce_394(val, _values, result) result = 0 result end # reduce 395 omitted def _reduce_396(val, _values, result) result = args val result end def _reduce_397(val, _values, result) self.lexer.command_start = true result = s(:args) result end def _reduce_398(val, _values, result) result = args val result end # reduce 399 omitted def _reduce_400(val, _values, result) result = args val result end def _reduce_401(val, _values, result) result = args val result end def _reduce_402(val, _values, result) result = args val result end def _reduce_403(val, _values, result) result = s(:shadow, val[0].to_sym) result end # reduce 404 omitted def _reduce_405(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest result end def _reduce_406(val, _values, result) lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body self.env.unextend result end def _reduce_407(val, _values, result) result = args val result end def _reduce_408(val, _values, result) result = val[0] result = 0 if result == s(:args) result end def _reduce_409(val, _values, result) result = val[1] result end def _reduce_410(val, _values, result) result = val[1] result end def _reduce_411(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_412(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_413(val, _values, result) args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend result end def _reduce_414(val, _values, result) # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] result end def _reduce_415(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_416(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 result end def _reduce_417(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 result end def _reduce_418(val, _values, result) result = self.lexer.lineno result end def _reduce_419(val, _values, result) args = self.call_args val[2..-1] result = val[0].concat args.sexp_body result end def _reduce_420(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_421(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_422(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_423(val, _values, result) result = new_call val[0], :call, val[2], val[1] result end def _reduce_424(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_425(val, _values, result) result = new_super val[1] result end def _reduce_426(val, _values, result) result = s(:zsuper) result end def _reduce_427(val, _values, result) result = new_aref val result end def _reduce_428(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_429(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_430(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_431(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_432(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_433(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_434(val, _values, result) result = self.lexer.lineno result end def _reduce_435(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] result end # reduce 436 omitted # reduce 437 omitted def _reduce_438(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above result end def _reduce_439(val, _values, result) result = nil result end def _reduce_440(val, _values, result) result = s(:array, val[0]) result end # reduce 441 omitted # reduce 442 omitted def _reduce_443(val, _values, result) result = val[1] result end # reduce 444 omitted def _reduce_445(val, _values, result) _, body = val result = body || s(:nil) result end # reduce 446 omitted def _reduce_447(val, _values, result) result = s(:lit, val[0]) result end def _reduce_448(val, _values, result) result = s(:lit, val[0]) result end # reduce 449 omitted def _reduce_450(val, _values, result) val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] result end def _reduce_451(val, _values, result) debug20 23, val, result result end # reduce 452 omitted def _reduce_453(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_454(val, _values, result) result = val[1] result end def _reduce_455(val, _values, result) result = new_string val result end def _reduce_456(val, _values, result) result = new_xstring val[1] result end def _reduce_457(val, _values, result) result = new_regexp val result end def _reduce_458(val, _values, result) result = s(:array) result end def _reduce_459(val, _values, result) result = val[1] result end def _reduce_460(val, _values, result) result = new_word_list result end def _reduce_461(val, _values, result) result = val[0].dup << new_word_list_entry(val) result end # reduce 462 omitted def _reduce_463(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_464(val, _values, result) result = s(:array) result end def _reduce_465(val, _values, result) result = val[1] result end def _reduce_466(val, _values, result) result = new_symbol_list result end def _reduce_467(val, _values, result) result = val[0].dup << new_symbol_list_entry(val) result end def _reduce_468(val, _values, result) result = s(:array) result end def _reduce_469(val, _values, result) result = val[1] result end def _reduce_470(val, _values, result) result = s(:array) result end def _reduce_471(val, _values, result) result = val[1] result end def _reduce_472(val, _values, result) result = new_qword_list result end def _reduce_473(val, _values, result) result = val[0].dup << new_qword_list_entry(val) result end def _reduce_474(val, _values, result) result = new_qsym_list result end def _reduce_475(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) result end def _reduce_476(val, _values, result) result = s(:str, "") result end def _reduce_477(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_478(val, _values, result) result = nil result end def _reduce_479(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_480(val, _values, result) result = nil result end def _reduce_481(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_482(val, _values, result) result = new_string val result end def _reduce_483(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg # TODO: expr_value ? result end def _reduce_484(val, _values, result) lexer.lex_strterm = val[1] result = s(:evstr, val[2]) result end def _reduce_485(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store, lexer.lex_state, ] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_value result end def _reduce_486(val, _values, result) # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg lexer.lex_state = oldlex_state case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else debug20 25 raise "unknown string body: #{stmt.inspect}" end result end def _reduce_487(val, _values, result) result = s(:gvar, val[0].to_sym) result end def _reduce_488(val, _values, result) result = s(:ivar, val[0].to_sym) result end def _reduce_489(val, _values, result) result = s(:cvar, val[0].to_sym) result end # reduce 490 omitted def _reduce_491(val, _values, result) lexer.lex_state = :expr_end result = val[1].to_sym result end def _reduce_492(val, _values, result) result = val[0].to_sym result end # reduce 493 omitted # reduce 494 omitted # reduce 495 omitted # reduce 496 omitted def _reduce_497(val, _values, result) lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) when :evstr then result = s(:dsym, "", result) else debug20 26, val, result end result end # reduce 498 omitted def _reduce_499(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 500 omitted # reduce 501 omitted # reduce 502 omitted # reduce 503 omitted # reduce 504 omitted # reduce 505 omitted # reduce 506 omitted # reduce 507 omitted # reduce 508 omitted def _reduce_509(val, _values, result) result = s(:nil) result end def _reduce_510(val, _values, result) result = s(:self) result end def _reduce_511(val, _values, result) result = s(:true) result end def _reduce_512(val, _values, result) result = s(:false) result end def _reduce_513(val, _values, result) result = s(:str, self.file) result end def _reduce_514(val, _values, result) result = s(:lit, lexer.lineno) result end def _reduce_515(val, _values, result) result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end result end def _reduce_516(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_517(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_518(val, _values, result) result = self.assignable val[0] result end def _reduce_519(val, _values, result) result = self.assignable val[0] debug20 29, val, result result end def _reduce_520(val, _values, result) result = s(:nth_ref, val[0]) result end def _reduce_521(val, _values, result) result = s(:back_ref, val[0]) result end def _reduce_522(val, _values, result) result = nil result end def _reduce_523(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_524(val, _values, result) result = val[2] result end def _reduce_525(val, _values, result) yyerrok result = nil debug20 30, val, result result end def _reduce_526(val, _values, result) result = val[1] self.lexer.lex_state = :expr_beg self.lexer.command_start = true # TODO: # $$ = parser->parser_in_kwarg; # parser->parser_in_kwarg = 1; result end def _reduce_527(val, _values, result) # TODO: parser->parser_in_kwarg = $1; result = val[0] self.lexer.lex_state = :expr_beg self.lexer.command_start = true result end def _reduce_528(val, _values, result) result = args val result end def _reduce_529(val, _values, result) result = args val result end def _reduce_530(val, _values, result) result = args val result end # reduce 531 omitted def _reduce_532(val, _values, result) result = val[1] result end def _reduce_533(val, _values, result) result = nil result end def _reduce_534(val, _values, result) result = args val result end def _reduce_535(val, _values, result) result = args val result end def _reduce_536(val, _values, result) result = args val result end def _reduce_537(val, _values, result) result = args val result end def _reduce_538(val, _values, result) result = args val result end def _reduce_539(val, _values, result) result = args val result end def _reduce_540(val, _values, result) result = args val result end def _reduce_541(val, _values, result) result = args val result end def _reduce_542(val, _values, result) result = args val result end def _reduce_543(val, _values, result) result = args val result end def _reduce_544(val, _values, result) result = args val result end def _reduce_545(val, _values, result) result = args val result end def _reduce_546(val, _values, result) result = args val result end def _reduce_547(val, _values, result) result = args val result end def _reduce_548(val, _values, result) result = args val result end def _reduce_549(val, _values, result) yyerror "formal argument cannot be a constant" result end def _reduce_550(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_551(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_552(val, _values, result) yyerror "formal argument cannot be a class variable" result end # reduce 553 omitted def _reduce_554(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier result end # reduce 555 omitted # reduce 556 omitted def _reduce_557(val, _values, result) result = val[1] result end def _reduce_558(val, _values, result) case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end result end def _reduce_559(val, _values, result) list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item result end # reduce 560 omitted def _reduce_561(val, _values, result) # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) result end def _reduce_562(val, _values, result) label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) result end def _reduce_563(val, _values, result) # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) result end def _reduce_564(val, _values, result) label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) result end # reduce 565 omitted def _reduce_566(val, _values, result) list, _, item = val result = list << item.last result end # reduce 567 omitted def _reduce_568(val, _values, result) result = args val result end # reduce 569 omitted # reduce 570 omitted def _reduce_571(val, _values, result) result = :"**#{val[1]}" result end def _reduce_572(val, _values, result) result = :"**" result end def _reduce_573(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_574(val, _values, result) result = self.assignable val[0], val[2] result end def _reduce_575(val, _values, result) result = s(:block, val[0]) result end def _reduce_576(val, _values, result) result = val[0] result << val[2] result end def _reduce_577(val, _values, result) result = s(:block, val[0]) result end def _reduce_578(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 579 omitted # reduce 580 omitted def _reduce_581(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" result end def _reduce_582(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 583 omitted # reduce 584 omitted def _reduce_585(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym result end def _reduce_586(val, _values, result) result = val[1] result end def _reduce_587(val, _values, result) result = nil result end # reduce 588 omitted def _reduce_589(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_590(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit result end def _reduce_591(val, _values, result) result = s(:array) result end def _reduce_592(val, _values, result) result = val[0] result end # reduce 593 omitted def _reduce_594(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash result end def _reduce_595(val, _values, result) result = s(:array, val[0], val[2]) result end def _reduce_596(val, _values, result) result = s(:array, s(:lit, val[0][0].to_sym), val.last) result end def _reduce_597(val, _values, result) _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value) result end def _reduce_598(val, _values, result) raise "not yet: #{val.inspect}" # result = s(:array, s(:lit, val[1].to_sym), val[1]) result end def _reduce_599(val, _values, result) result = s(:array, s(:kwsplat, val[1])) result end # reduce 600 omitted # reduce 601 omitted # reduce 602 omitted # reduce 603 omitted # reduce 604 omitted # reduce 605 omitted # reduce 606 omitted # reduce 607 omitted # reduce 608 omitted # reduce 609 omitted # reduce 610 omitted # reduce 611 omitted # reduce 612 omitted # reduce 613 omitted # reduce 614 omitted # reduce 615 omitted # reduce 616 omitted # reduce 617 omitted # reduce 618 omitted # reduce 619 omitted # reduce 620 omitted # reduce 621 omitted # reduce 622 omitted def _reduce_623(val, _values, result) yyerrok result end # reduce 624 omitted # reduce 625 omitted def _reduce_626(val, _values, result) yyerrok result end def _reduce_627(val, _values, result) result = nil; result end def _reduce_none(val, _values, result) val[0] end end # class Ruby23Parser ruby_parser-3.11.0/lib/.document0000444000004100000410000000000513277753330016551 0ustar www-datawww-data*.rb ruby_parser-3.11.0/lib/ruby_lexer.rb0000444000004100000410000010305013277753330017443 0ustar www-datawww-data# encoding: UTF-8 $DEBUG = true if ENV["DEBUG"] class RubyLexer # :stopdoc: HAS_ENC = "".respond_to? :encoding IDENT_CHAR = if HAS_ENC then /[\w\u0080-\u{10ffff}]/u else /[\w\x80-\xFF]/n end EOF = :eof_haha! # ruby constants for strings (should this be moved somewhere else?) STR_FUNC_BORING = 0x00 STR_FUNC_ESCAPE = 0x01 # TODO: remove and replace with REGEXP STR_FUNC_EXPAND = 0x02 STR_FUNC_REGEXP = 0x04 STR_FUNC_QWORDS = 0x08 STR_FUNC_SYMBOL = 0x10 STR_FUNC_INDENT = 0x20 # <<-HEREDOC STR_FUNC_ICNTNT = 0x40 # <<~HEREDOC STR_SQUOTE = STR_FUNC_BORING STR_DQUOTE = STR_FUNC_BORING | STR_FUNC_EXPAND STR_XQUOTE = STR_FUNC_BORING | STR_FUNC_EXPAND STR_REGEXP = STR_FUNC_REGEXP | STR_FUNC_ESCAPE | STR_FUNC_EXPAND STR_SSYM = STR_FUNC_SYMBOL STR_DSYM = STR_FUNC_SYMBOL | STR_FUNC_EXPAND ESCAPES = { "a" => "\007", "b" => "\010", "e" => "\033", "f" => "\f", "n" => "\n", "r" => "\r", "s" => " ", "t" => "\t", "v" => "\13", "\\" => '\\', "\n" => "", "C-\?" => 127.chr, "c\?" => 127.chr, } TOKENS = { "!" => :tBANG, "!=" => :tNEQ, # "!@" => :tUBANG, "!~" => :tNMATCH, "," => :tCOMMA, ".." => :tDOT2, "..." => :tDOT3, "=" => :tEQL, "==" => :tEQ, "===" => :tEQQ, "=>" => :tASSOC, "=~" => :tMATCH, "->" => :tLAMBDA, } TAB_WIDTH = 8 @@regexp_cache = Hash.new { |h,k| h[k] = Regexp.new(Regexp.escape(k)) } @@regexp_cache[nil] = nil # :startdoc: attr_accessor :lineno # we're bypassing oedipus' lineno handling. attr_accessor :brace_nest attr_accessor :cmdarg attr_accessor :command_start attr_accessor :command_state attr_accessor :last_state attr_accessor :cond attr_accessor :extra_lineno ## # Additional context surrounding tokens that both the lexer and # grammar use. attr_accessor :lex_state attr_accessor :lex_strterm attr_accessor :lpar_beg attr_accessor :paren_nest attr_accessor :parser # HACK for very end of lexer... *sigh* attr_accessor :space_seen attr_accessor :string_buffer attr_accessor :string_nest if $DEBUG then alias lex_state= lex_state= def lex_state=o return if @lex_state == o c = caller.first c = caller[1] if c =~ /\bresult\b/ warn "lex_state: %p -> %p from %s" % [@lex_state, o, c.clean_caller] @lex_state = o end end # Last token read via next_token. attr_accessor :token ## # What version of ruby to parse. 18 and 19 are the only valid values # currently supported. attr_accessor :version attr_writer :comments def initialize v = 18 self.version = v @lex_state = :expr_none self.cmdarg = RubyParserStuff::StackState.new(:cmdarg, $DEBUG) self.cond = RubyParserStuff::StackState.new(:cond, $DEBUG) reset end def arg_ambiguous self.warning("Ambiguous first argument. make sure.") end def arg_state in_arg_state? ? :expr_arg : :expr_beg end def beginning_of_line? ss.bol? end alias :bol? :beginning_of_line? # to make .rex file more readable def comments # TODO: remove this... maybe comment_string + attr_accessor c = @comments.join @comments.clear c end def end_of_stream? ss.eos? end def expr_dot? lex_state == :expr_dot end def expr_fname? lex_state == :expr_fname end def expr_result token, text cond.push false cmdarg.push false result :expr_beg, token, text end def heredoc here # TODO: rewrite / remove _, eos, func, last_line = here indent = (func & STR_FUNC_INDENT) != 0 ? "[ \t]*" : nil content_indent = (func & STR_FUNC_ICNTNT) != 0 expand = (func & STR_FUNC_EXPAND) != 0 eos_re = /#{indent}#{Regexp.escape eos}(\r*\n|\z)/ err_msg = "can't match #{eos_re.inspect} anywhere in " rb_compile_error err_msg if end_of_stream? if beginning_of_line? && scan(eos_re) then self.lineno += 1 ss.unread_many last_line # TODO: figure out how to remove this return :tSTRING_END, eos end self.string_buffer = [] if expand then case when scan(/#[$@]/) then ss.pos -= 1 # FIX omg stupid return :tSTRING_DVAR, matched when scan(/#[{]/) then return :tSTRING_DBEG, matched when scan(/#/) then string_buffer << '#' end begin c = tokadd_string func, "\n", nil rb_compile_error err_msg if c == RubyLexer::EOF if c != "\n" then return :tSTRING_CONTENT, string_buffer.join.delete("\r") else string_buffer << scan(/\n/) end rb_compile_error err_msg if end_of_stream? end until check(eos_re) else until check(eos_re) do string_buffer << scan(/.*(\n|\z)/) rb_compile_error err_msg if end_of_stream? end end self.lex_strterm = [:heredoc, eos, func, last_line] string_content = string_buffer.join.delete("\r") string_content = heredoc_dedent(string_content) if content_indent && ruby23plus? return :tSTRING_CONTENT, string_content end def heredoc_dedent(string_content) width = string_content.scan(/^[ \t]*(?=\S)/).map do |whitespace| heredoc_whitespace_indent_size whitespace end.min || 0 string_content.split("\n", -1).map do |line| dedent_string line, width end.join "\n" end def dedent_string(string, width) characters_skipped = 0 indentation_skipped = 0 string.chars.each do |char| break if indentation_skipped >= width if char == ' ' characters_skipped += 1 indentation_skipped += 1 elsif char == "\t" proposed = TAB_WIDTH * (indentation_skipped / TAB_WIDTH + 1) break if (proposed > width) characters_skipped += 1 indentation_skipped = proposed end end string[characters_skipped..-1] end def heredoc_whitespace_indent_size(whitespace) whitespace.chars.inject 0 do |size, char| if char == "\t" size + TAB_WIDTH else size + 1 end end end def heredoc_identifier # TODO: remove / rewrite term, func = nil, STR_FUNC_BORING self.string_buffer = [] heredoc_indent_mods = '-' heredoc_indent_mods += '\~' if ruby23plus? case when scan(/([#{heredoc_indent_mods}]?)([\'\"\`])(.*?)\2/) then term = ss[2] func |= STR_FUNC_INDENT unless ss[1].empty? func |= STR_FUNC_ICNTNT if ss[1] == '~' func |= case term when "\'" then STR_SQUOTE when '"' then STR_DQUOTE else STR_XQUOTE end string_buffer << ss[3] when scan(/[#{heredoc_indent_mods}]?([\'\"\`])(?!\1*\Z)/) then rb_compile_error "unterminated here document identifier" when scan(/([#{heredoc_indent_mods}]?)(#{IDENT_CHAR}+)/) then term = '"' func |= STR_DQUOTE unless ss[1].empty? then func |= STR_FUNC_INDENT func |= STR_FUNC_ICNTNT if ss[1] == '~' end string_buffer << ss[2] else return nil end if scan(/.*\n/) then # TODO: think about storing off the char range instead line = matched else line = nil end self.lex_strterm = [:heredoc, string_buffer.join, func, line] if term == '`' then result nil, :tXSTRING_BEG, "`" else result nil, :tSTRING_BEG, "\"" end end def in_fname? in_lex_state? :expr_fname end def in_arg_state? # TODO: rename is_after_operator? in_lex_state? :expr_fname, :expr_dot end def in_lex_state?(*states) states.include? lex_state end def int_with_base base rb_compile_error "Invalid numeric format" if matched =~ /__/ text = matched case when text.end_with?('ri') return result(:expr_end, :tIMAGINARY, Complex(0, Rational(text.chop.chop.to_i(base)))) when text.end_with?('r') return result(:expr_end, :tRATIONAL, Rational(text.chop.to_i(base))) when text.end_with?('i') return result(:expr_end, :tIMAGINARY, Complex(0, text.chop.to_i(base))) else return result(:expr_end, :tINTEGER, text.to_i(base)) end end def is_arg? in_lex_state? :expr_arg, :expr_cmdarg end def is_beg? in_lex_state? :expr_beg, :expr_value, :expr_mid, :expr_class, :expr_labelarg end def is_end? in_lex_state? :expr_end, :expr_endarg, :expr_endfn end def ruby22_label? ruby22plus? and is_label_possible? end def is_label_possible? (in_lex_state?(:expr_beg, :expr_endfn) && !command_state) || is_arg? end def is_label_suffix? check(/:(?!:)/) end def is_space_arg? c = "x" is_arg? and space_seen and c !~ /\s/ end def matched ss.matched end def not_end? not is_end? end def process_amper text token = if is_arg? && space_seen && !check(/\s/) then warning("`&' interpreted as argument prefix") :tAMPER elsif in_lex_state? :expr_beg, :expr_mid then :tAMPER else :tAMPER2 end return result(:arg_state, token, "&") end def process_backref text token = ss[1].to_sym # TODO: can't do lineno hack w/ symbol result :expr_end, :tBACK_REF, token end def process_begin text @comments << matched unless scan(/.*?\n=end( |\t|\f)*[^\n]*(\n|\z)/m) then @comments.clear rb_compile_error("embedded document meets end of file") end @comments << matched self.lineno += matched.count("\n") nil # TODO end def process_bracing text cond.lexpop cmdarg.lexpop case matched when "}" then self.brace_nest -= 1 self.lex_state = :expr_endarg # TODO # if (c == '}') { # if (!brace_nest--) c = tSTRING_DEND; # } return :tRCURLY, matched when "]" then self.paren_nest -= 1 self.lex_state = :expr_endarg return :tRBRACK, matched when ")" then self.paren_nest -= 1 self.lex_state = :expr_endfn return :tRPAREN, matched else raise "Unknown bracing: #{matched.inspect}" end end def process_colon1 text # ?: / then / when if is_end? || check(/\s/) then return result :expr_beg, :tCOLON, text end case when scan(/\'/) then string STR_SSYM when scan(/\"/) then string STR_DSYM end result :expr_fname, :tSYMBEG, text end def process_colon2 text if is_beg? || in_lex_state?(:expr_class) || is_space_arg? then result :expr_beg, :tCOLON3, text else result :expr_dot, :tCOLON2, text end end def process_curly_brace text self.brace_nest += 1 if lpar_beg && lpar_beg == paren_nest then self.lpar_beg = nil self.paren_nest -= 1 return expr_result(:tLAMBEG, "{") end token = if is_arg? || in_lex_state?(:expr_end, :expr_endfn) then :tLCURLY # block (primary) elsif in_lex_state?(:expr_endarg) then :tLBRACE_ARG # block (expr) else :tLBRACE # hash end self.command_start = true unless token == :tLBRACE return expr_result(token, "{") end def process_float text rb_compile_error "Invalid numeric format" if text =~ /__/ case when text.end_with?('ri') return result(:expr_end, :tIMAGINARY, Complex(0, Rational(text.chop.chop))) when text.end_with?('r') return result(:expr_end, :tRATIONAL, Rational(text.chop)) when text.end_with?('i') return result(:expr_end, :tIMAGINARY, Complex(0, text.chop.to_f)) else return result(:expr_end, :tFLOAT, text.to_f) end end def process_gvar text text.lineno = self.lineno result(:expr_end, :tGVAR, text) end def process_gvar_oddity text return result :expr_end, "$", "$" if text == "$" # TODO: wtf is this? rb_compile_error "#{text.inspect} is not allowed as a global variable name" end def process_ivar text tok_id = text =~ /^@@/ ? :tCVAR : :tIVAR text.lineno = self.lineno return result(:expr_end, tok_id, text) end def process_lchevron text if (!in_lex_state?(:expr_dot, :expr_class) && !is_end? && (!is_arg? || space_seen)) then tok = self.heredoc_identifier return tok if tok end return result(:arg_state, :tLSHFT, "\<\<") end def process_newline_or_comment text c = matched hit = false if c == '#' then ss.pos -= 1 while scan(/\s*\#.*(\n+|\z)/) do hit = true self.lineno += matched.lines.to_a.size @comments << matched.gsub(/^ +#/, '#').gsub(/^ +$/, '') end return nil if end_of_stream? end self.lineno += 1 unless hit # Replace a string of newlines with a single one self.lineno += matched.lines.to_a.size if scan(/\n+/) return if in_lex_state?(:expr_beg, :expr_value, :expr_class, :expr_fname, :expr_dot) if scan(/([\ \t\r\f\v]*)(\.|&)/) then self.space_seen = true unless ss[1].empty? ss.pos -= 1 return unless check(/\.\./) end self.command_start = true return result(:expr_beg, :tNL, nil) end def process_nthref text # TODO: can't do lineno hack w/ number result :expr_end, :tNTH_REF, ss[1].to_i end def process_paren text token = if ruby18 then process_paren18 else process_paren19 end self.paren_nest += 1 # TODO: add :expr_label to :expr_beg (set in expr_result below) return expr_result(token, "(") end def process_paren18 self.command_start = true token = :tLPAREN2 if in_lex_state? :expr_beg, :expr_mid then token = :tLPAREN elsif space_seen then if in_lex_state? :expr_cmdarg then token = :tLPAREN_ARG elsif in_lex_state? :expr_arg then warning "don't put space before argument parentheses" end else # not a ternary -- do nothing? end token end def process_paren19 if is_beg? then :tLPAREN elsif is_space_arg? then :tLPAREN_ARG else :tLPAREN2 # plain '(' in parse.y end end def process_percent text return parse_quote if is_beg? return result(:expr_beg, :tOP_ASGN, "%") if scan(/\=/) return parse_quote if is_arg? && space_seen && ! check(/\s/) return result(:arg_state, :tPERCENT, "%") end def process_plus_minus text sign = matched utype, type = if sign == "+" then [:tUPLUS, :tPLUS] else [:tUMINUS, :tMINUS] end if in_arg_state? then if scan(/@/) then return result(:expr_arg, utype, "#{sign}@") else return result(:expr_arg, type, sign) end end return result(:expr_beg, :tOP_ASGN, sign) if scan(/\=/) if (is_beg? || (is_arg? && space_seen && !check(/\s/))) then arg_ambiguous if is_arg? if check(/\d/) then return nil if utype == :tUPLUS return result(:expr_beg, :tUMINUS_NUM, sign) end return result(:expr_beg, utype, sign) end return result(:expr_beg, type, sign) end def process_questionmark text if is_end? then state = ruby18 ? :expr_beg : :expr_value # HACK? return result(state, :tEH, "?") end if end_of_stream? then rb_compile_error "incomplete character syntax: parsed #{text.inspect}" end if check(/\s|\v/) then unless is_arg? then c2 = { " " => 's', "\n" => 'n', "\t" => 't', "\v" => 'v', "\r" => 'r', "\f" => 'f' }[matched] if c2 then warning("invalid character syntax; use ?\\" + c2) end end # ternary state = ruby18 ? :expr_beg : :expr_value # HACK? return result(state, :tEH, "?") elsif check(/\w(?=\w)/) then # ternary, also return result(:expr_beg, :tEH, "?") end c = if scan(/\\/) then self.read_escape else ss.getch end if version == 18 then return result(:expr_end, :tINTEGER, c[0].ord & 0xff) else return result(:expr_end, :tSTRING, c) end end def process_slash text if is_beg? then string STR_REGEXP return result(nil, :tREGEXP_BEG, "/") end if scan(/\=/) then return result(:expr_beg, :tOP_ASGN, "/") end if is_arg? && space_seen then unless scan(/\s/) then arg_ambiguous string STR_REGEXP, "/" return result(nil, :tREGEXP_BEG, "/") end end return result(:arg_state, :tDIVIDE, "/") end def process_square_bracket text self.paren_nest += 1 token = nil if in_arg_state? then case when scan(/\]\=/) then self.paren_nest -= 1 # HACK? I dunno, or bug in MRI return result(:expr_arg, :tASET, "[]=") when scan(/\]/) then self.paren_nest -= 1 # HACK? I dunno, or bug in MRI return result(:expr_arg, :tAREF, "[]") else rb_compile_error "unexpected '['" end elsif is_beg? then token = :tLBRACK elsif is_arg? && space_seen then token = :tLBRACK else token = :tLBRACK2 end return expr_result(token, "[") end def process_symbol text symbol = match[1].gsub(ESC) { unescape $1 } rb_compile_error "symbol cannot contain '\\0'" if ruby18 && symbol =~ /\0/ return result(:expr_end, :tSYMBOL, symbol) end def was_label? @was_label = ruby22_label? true end def process_label_or_string text if @was_label && text =~ /:\Z/ then @was_label = nil return process_label text elsif text =~ /:\Z/ then ss.pos -= 1 # put back ":" text = text[0..-2] end result :expr_end, :tSTRING, text[1..-2].gsub(/\\\\/, "\\").gsub(/\\'/, "'") end def process_label text symbol = text[1..-3].gsub(ESC) { unescape $1 } result(:expr_labelarg, :tLABEL, [symbol, self.lineno]) end def process_token text # TODO: make this always return [token, lineno] token = self.token = text token << matched if scan(/[\!\?](?!=)/) tok_id = case when token =~ /[!?]$/ then :tFID when in_lex_state?(:expr_fname) && scan(/=(?:(?![~>=])|(?==>))/) then # ident=, not =~ => == or followed by => # TODO test lexing of a=>b vs a==>b token << matched :tIDENTIFIER when token =~ /^[A-Z]/ then :tCONSTANT else :tIDENTIFIER end if !ruby18 and is_label_possible? and is_label_suffix? then scan(/:/) return result(:expr_labelarg, :tLABEL, [token, self.lineno]) end unless in_lex_state? :expr_dot then # See if it is a reserved word. keyword = if ruby18 then # REFACTOR need 18/19 lexer subclasses RubyParserStuff::Keyword.keyword18 token else RubyParserStuff::Keyword.keyword19 token end return process_token_keyword keyword if keyword end # unless in_lex_state? :expr_dot # TODO: # if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) { state = if is_beg? or is_arg? or in_lex_state? :expr_dot then command_state ? :expr_cmdarg : :expr_arg elsif not ruby18 and in_lex_state? :expr_fname then :expr_endfn else :expr_end end if not [:expr_dot, :expr_fname].include? last_state and self.parser.env[token.to_sym] == :lvar then state = :expr_end end token.lineno = self.lineno # yes, on a string. I know... I know... return result(state, tok_id, token) end def process_token_keyword keyword state = keyword.state value = [token, self.lineno] self.command_start = true if state == :expr_beg and lex_state != :expr_fname case when lex_state == :expr_fname then result(state, keyword.id0, keyword.name) when keyword.id0 == :kDO then case when lpar_beg && lpar_beg == paren_nest then self.lpar_beg = nil self.paren_nest -= 1 expr_result(:kDO_LAMBDA, value) when cond.is_in_state then result(state, :kDO_COND, value) when cmdarg.is_in_state && lex_state != :expr_cmdarg then result(state, :kDO_BLOCK, value) when in_lex_state?(:expr_beg, :expr_endarg) then result(state, :kDO_BLOCK, value) else result(state, :kDO, value) end when in_lex_state?(:expr_beg, :expr_value, :expr_labelarg) then result(state, keyword.id0, value) when keyword.id0 != keyword.id1 then result(:expr_beg, keyword.id1, value) else result(state, keyword.id1, value) end end def process_underscore text ss.unscan # put back "_" if beginning_of_line? && scan(/\__END__(\r?\n|\Z)/) then return [RubyLexer::EOF, RubyLexer::EOF] elsif scan(/\_\w*/) then return process_token matched end end def rb_compile_error msg msg += ". near line #{self.lineno}: #{ss.rest[/^.*/].inspect}" raise RubyParser::SyntaxError, msg end def read_escape # TODO: remove / rewrite case when scan(/\\/) then # Backslash '\\' when scan(/n/) then # newline self.extra_lineno -= 1 "\n" when scan(/t/) then # horizontal tab "\t" when scan(/r/) then # carriage-return "\r" when scan(/f/) then # form-feed "\f" when scan(/v/) then # vertical tab "\13" when scan(/a/) then # alarm(bell) "\007" when scan(/e/) then # escape "\033" when scan(/b/) then # backspace "\010" when scan(/s/) then # space " " when scan(/[0-7]{1,3}/) then # octal constant (matched.to_i(8) & 0xFF).chr when scan(/x([0-9a-fA-F]{1,2})/) then # hex constant ss[1].to_i(16).chr when check(/M-\\[\\MCc]/) then scan(/M-\\/) # eat it c = self.read_escape c[0] = (c[0].ord | 0x80).chr c when scan(/M-(.)/) then c = ss[1] c[0] = (c[0].ord | 0x80).chr c when check(/(C-|c)\\[\\MCc]/) then scan(/(C-|c)\\/) # eat it c = self.read_escape c[0] = (c[0].ord & 0x9f).chr c when scan(/C-\?|c\?/) then 127.chr when scan(/(C-|c)(.)/) then c = ss[2] c[0] = (c[0].ord & 0x9f).chr c when scan(/^[89]/i) then # bad octal or hex... MRI ignores them :( matched when scan(/u([0-9a-fA-F]{2,4}|\{[0-9a-fA-F]{2,6}\})/) then [ss[1].delete("{}").to_i(16)].pack("U") when scan(/[McCx0-9]/) || end_of_stream? then rb_compile_error("Invalid escape character syntax") else ss.getch end end def regx_options # TODO: rewrite / remove good, bad = [], [] if scan(/[a-z]+/) then good, bad = matched.split(//).partition { |s| s =~ /^[ixmonesu]$/ } end unless bad.empty? then rb_compile_error("unknown regexp option%s - %s" % [(bad.size > 1 ? "s" : ""), bad.join.inspect]) end return good.join end def reset self.brace_nest = 0 self.command_start = true self.comments = [] self.lex_state = :expr_none self.lex_strterm = nil self.lineno = 1 self.lpar_beg = nil self.paren_nest = 0 self.space_seen = false self.string_nest = 0 self.token = nil self.extra_lineno = 0 self.cmdarg.reset self.cond.reset end def result lex_state, token, text # :nodoc: lex_state = self.arg_state if lex_state == :arg_state self.lex_state = lex_state if lex_state [token, text] end def ruby18 RubyParser::V18 === parser end def scan re ss.scan re end def check re ss.check re end def eat_whitespace r = scan(/\s+/) self.extra_lineno += r.count("\n") if r r end def fixup_lineno extra = 0 self.lineno += self.extra_lineno + extra self.extra_lineno = 0 end def scanner_class # TODO: design this out of oedipus_lex. or something. RPStringScanner end def space_vs_beginning space_type, beg_type, fallback if is_space_arg? check(/./m) then warning "`**' interpreted as argument prefix" space_type elsif is_beg? then beg_type else # TODO: warn_balanced("**", "argument prefix"); fallback end end def string type, beg = matched, nnd = "\0" self.lex_strterm = [:strterm, type, beg, nnd] end # TODO: consider # def src= src # raise "bad src: #{src.inspect}" unless String === src # @src = RPStringScanner.new(src) # end def tokadd_escape term # TODO: rewrite / remove case when scan(/\\\n/) then # just ignore when scan(/\\([0-7]{1,3}|x[0-9a-fA-F]{1,2})/) then self.string_buffer << matched when scan(/\\([MC]-|c)(?=\\)/) then self.string_buffer << matched self.tokadd_escape term when scan(/\\([MC]-|c)(.)/) then self.string_buffer << matched when scan(/\\[McCx]/) then rb_compile_error "Invalid escape character syntax" when scan(/\\(.)/m) then chr = ss[1] prev = self.string_buffer.last if term == chr && prev && prev.end_with?("(?") then self.string_buffer << chr else self.string_buffer << matched end else rb_compile_error "Invalid escape character syntax" end end def tokadd_string(func, term, paren) # TODO: rewrite / remove qwords = (func & STR_FUNC_QWORDS) != 0 escape = (func & STR_FUNC_ESCAPE) != 0 expand = (func & STR_FUNC_EXPAND) != 0 regexp = (func & STR_FUNC_REGEXP) != 0 symbol = (func & STR_FUNC_SYMBOL) != 0 paren_re = @@regexp_cache[paren] term_re = @@regexp_cache[term] until end_of_stream? do c = nil handled = true case when paren_re && scan(paren_re) then self.string_nest += 1 when scan(term_re) then if self.string_nest == 0 then ss.pos -= 1 break else self.string_nest -= 1 end when expand && scan(/#(?=[\$\@\{])/) then ss.pos -= 1 break when qwords && scan(/\s/) then ss.pos -= 1 break when expand && scan(/#(?!\n)/) then # do nothing when check(/\\/) then case when qwords && scan(/\\\n/) then string_buffer << "\n" next when qwords && scan(/\\\s/) then c = ' ' when expand && scan(/\\\n/) then next when regexp && check(/\\/) then self.tokadd_escape term next when expand && scan(/\\/) then c = self.read_escape when scan(/\\\n/) then # do nothing when scan(/\\\\/) then string_buffer << '\\' if escape c = '\\' when scan(/\\/) then unless scan(term_re) || paren.nil? || scan(paren_re) then string_buffer << "\\" end else handled = false end # inner /\\/ case else handled = false end # top case unless handled then t = Regexp.escape term x = Regexp.escape(paren) if paren && paren != "\000" re = if qwords then if HAS_ENC then /[^#{t}#{x}\#\0\\\s]+|./ # |. to pick up whatever else /[^#{t}#{x}\#\0\\\s\v]+|./ # argh. 1.8's \s doesn't pick up \v end else /[^#{t}#{x}\#\0\\]+|./ end scan re c = matched rb_compile_error "symbol cannot contain '\\0'" if symbol && c =~ /\0/ end # unless handled c ||= matched string_buffer << c end # until c ||= matched c = RubyLexer::EOF if end_of_stream? return c end def unescape s r = ESCAPES[s] self.extra_lineno += 1 if s == "\n" # eg backslash newline strings self.extra_lineno -= 1 if r && s == "n" # literal \n, not newline return r if r x = case s when /^[0-7]{1,3}/ then ($&.to_i(8) & 0xFF).chr when /^x([0-9a-fA-F]{1,2})/ then $1.to_i(16).chr when /^M-(.)/ then ($1[0].ord | 0x80).chr when /^(C-|c)(.)/ then ($2[0].ord & 0x9f).chr when /^[89a-f]/i then # bad octal or hex... ignore? that's what MRI does :( s when /^[McCx0-9]/ then rb_compile_error("Invalid escape character syntax") when /u([0-9a-fA-F]{2,4}|\{[0-9a-fA-F]{2,6}\})/ then [$1.delete("{}").to_i(16)].pack("U") else s end x.force_encoding "UTF-8" if HAS_ENC x end def warning s # do nothing for now end def ruby22plus? parser.class.version >= 22 end def ruby23plus? parser.class.version >= 23 end def process_string # TODO: rewrite / remove token = if lex_strterm[0] == :heredoc then self.heredoc lex_strterm else self.parse_string lex_strterm end token_type, c = token if ruby22plus? && token_type == :tSTRING_END && ["'", '"'].include?(c) then if (([:expr_beg, :expr_endfn].include?(lex_state) && !cond.is_in_state) || is_arg?) && is_label_suffix? then scan(/:/) token_type = token[0] = :tLABEL_END end end if [:tSTRING_END, :tREGEXP_END, :tLABEL_END].include? token_type then self.lex_strterm = nil self.lex_state = (token_type == :tLABEL_END) ? :expr_labelarg : :expr_end end return token end def parse_quote # TODO: remove / rewrite beg, nnd, short_hand, c = nil, nil, false, nil if scan(/[a-z0-9]{1,2}/i) then # Long-hand (e.g. %Q{}). rb_compile_error "unknown type of %string" if ss.matched_size == 2 c, beg, short_hand = matched, ss.getch, false else # Short-hand (e.g. %{, %., %!, etc) c, beg, short_hand = 'Q', ss.getch, true end if end_of_stream? or c == RubyLexer::EOF or beg == RubyLexer::EOF then rb_compile_error "unterminated quoted string meets end of file" end # Figure nnd-char. "\0" is special to indicate beg=nnd and that no nesting? nnd = { "(" => ")", "[" => "]", "{" => "}", "<" => ">" }[beg] nnd, beg = beg, "\0" if nnd.nil? token_type, text = nil, "%#{c}#{beg}" token_type, string_type = case c when 'Q' then ch = short_hand ? nnd : c + beg text = "%#{ch}" [:tSTRING_BEG, STR_DQUOTE] when 'q' then [:tSTRING_BEG, STR_SQUOTE] when 'W' then eat_whitespace [:tWORDS_BEG, STR_DQUOTE | STR_FUNC_QWORDS] when 'w' then eat_whitespace [:tQWORDS_BEG, STR_SQUOTE | STR_FUNC_QWORDS] when 'x' then [:tXSTRING_BEG, STR_XQUOTE] when 'r' then [:tREGEXP_BEG, STR_REGEXP] when 's' then self.lex_state = :expr_fname [:tSYMBEG, STR_SSYM] when 'I' then eat_whitespace [:tSYMBOLS_BEG, STR_DQUOTE | STR_FUNC_QWORDS] when 'i' then eat_whitespace [:tQSYMBOLS_BEG, STR_SQUOTE | STR_FUNC_QWORDS] end rb_compile_error "Bad %string type. Expected [QqWwIixrs], found '#{c}'." if token_type.nil? raise "huh" unless string_type string string_type, nnd, beg return token_type, text end def parse_string quote # TODO: rewrite / remove _, string_type, term, open = quote space = false # FIX: remove these func = string_type paren = open term_re = @@regexp_cache[term] qwords = (func & STR_FUNC_QWORDS) != 0 regexp = (func & STR_FUNC_REGEXP) != 0 expand = (func & STR_FUNC_EXPAND) != 0 unless func then # nil'ed from qwords below. *sigh* return :tSTRING_END, nil end space = true if qwords and eat_whitespace if self.string_nest == 0 && scan(/#{term_re}/) then if qwords then quote[1] = nil return :tSPACE, nil elsif regexp then return :tREGEXP_END, self.regx_options else return :tSTRING_END, term end end return :tSPACE, nil if space self.string_buffer = [] if expand case when scan(/#(?=\$(-.|[a-zA-Z_0-9~\*\$\?!@\/\\;,\.=:<>\"\&\`\'+]))/) then # TODO: !ISASCII # ?! see parser_peek_variable_name return :tSTRING_DVAR, nil when scan(/#(?=\@\@?[a-zA-Z_])/) then # TODO: !ISASCII return :tSTRING_DVAR, nil when scan(/#[{]/) then return :tSTRING_DBEG, nil when scan(/#/) then string_buffer << '#' end end if tokadd_string(func, term, paren) == RubyLexer::EOF then rb_compile_error "unterminated string meets end of file" end return :tSTRING_CONTENT, string_buffer.join end end require "ruby_lexer.rex" if ENV["RP_LINENO_DEBUG"] then class RubyLexer alias :old_lineno= :lineno= def d o $stderr.puts o.inspect end def lineno= n self.old_lineno= n where = caller.first.split(/:/).first(2).join(":") d :lineno => [n, where, ss && ss.rest[0,40]] end end end ruby_parser-3.11.0/lib/ruby20_parser.rb0000644000004100000410000075714613277753330020011 0ustar www-datawww-data# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.14 # from Racc grammer file "". # require 'racc/parser.rb' class Ruby20Parser < RubyParser::Parser require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ##### State transition tables begin ### clist = [ '-600,-102,-104,578,659,578,269,-600,-600,-600,216,217,524,-600,-600', '998,-600,751,-608,213,216,217,-85,-102,240,-600,528,269,604,-101,578', '578,659,-71,604,450,-600,-600,658,-600,-600,-600,-600,-600,742,109,216', '217,743,-104,-100,-99,-106,220,-107,578,237,-103,731,269,239,238,235', '236,207,-106,658,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600', '-600,-600,-600,731,731,-600,-600,-600,-101,643,269,606,605,-600,-419', '268,-600,606,605,624,763,-600,220,-600,702,-600,-600,-600,-600,-600', '-600,-600,220,-600,-600,-600,268,-102,-104,113,-103,113,-102,-104,112', '750,112,-290,-600,-600,-93,-94,208,-600,-290,-290,-290,-596,220,-290', '-290,-290,-103,-290,113,-101,113,113,268,112,-101,112,112,-290,-290', '-290,-95,-91,-90,-97,113,-98,209,-290,-290,112,-290,-290,-290,-290,-290', '113,-93,-103,932,-105,112,268,-103,620,219,215,83,113,113,-95,-596,623', '112,112,84,216,217,-92,-290,-290,-290,-290,-290,-290,-290,-290,-290', '-290,-290,-290,-290,-290,113,701,-290,-290,-290,112,788,-290,220,604', '-290,636,609,-290,-290,-517,-290,-94,-290,259,-290,880,-290,-290,-290', '-290,-290,-290,-290,316,-290,-93,-290,-597,619,720,604,557,556,555,317', '558,622,-593,-95,-290,-290,-290,-290,-503,-290,-518,-290,-93,452,220', '-503,-503,-503,-105,659,-503,-503,-503,-102,-503,-93,659,-99,-93,606', '605,-96,-503,-101,-503,-503,-503,-428,-95,-93,537,-95,354,539,-503,-503', '378,-503,-503,-503,-503,-503,-95,658,-508,-503,606,605,381,113,658,-508', '-503,-100,112,761,-107,-593,405,785,786,-503,844,407,406,-503,-503,-503', '-503,-503,-503,-503,-503,-503,-503,-503,-503,-503,-503,-593,-428,-503', '-503,-503,604,-503,-503,-428,604,-503,524,262,-503,-503,384,-503,-428', '-503,263,-503,387,-503,-503,-503,-503,-503,-503,-503,819,-503,584,-503', '-102,-104,-428,720,604,557,556,555,403,558,-594,-600,-503,-503,-503', '-503,-506,-503,537,-503,-97,536,113,-506,-506,-506,-503,112,-506,-506', '-506,-106,-506,606,605,602,408,606,605,607,-506,240,-506,-506,-506,113', '113,-513,451,-600,112,112,-506,-506,-513,-506,-506,-506,-506,-506,453', '802,454,-506,-600,606,605,612,219,604,-506,-600,566,237,485,-594,-596', '239,238,-506,-600,978,271,-506,-506,-506,-506,-506,-506,-506,-506,-506', '-506,-506,-506,-506,-506,-594,-600,-506,-506,-506,-600,-506,-506,574', '573,-506,495,-600,-506,-506,498,-506,-596,-506,771,-506,-600,-506,-506', '-506,-506,-506,-506,-506,564,-506,-512,-506,606,605,617,-509,-506,-512', '-600,566,214,567,-509,-506,-506,-506,-506,-506,-290,-506,-517,-506,-518', '500,637,-290,-290,-290,-506,220,-92,-290,-290,801,-290,557,556,555,802', '558,-338,-101,574,573,-510,113,262,-338,-70,566,112,-510,-98,263,-290', '-290,-338,-290,-290,-290,-290,-290,-90,-107,-91,-514,-95,537,318,319', '539,562,-514,-99,240,-100,567,-104,220,113,571,570,574,573,112,-290', '-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,-290,509', '-511,-290,-290,-290,510,642,237,-511,220,-290,239,238,-290,-503,517', '220,567,-290,1002,-290,-503,-290,-290,-290,-290,-290,-290,-290,274,-290', '537,-290,213,539,720,220,557,556,555,745,558,574,573,-600,-290,-290', '271,-96,747,-290,-600,-600,-600,848,819,-600,-600,-600,-105,-600,720', '521,557,556,555,240,558,525,-600,-600,-600,-600,716,116,117,118,119', '120,526,-600,-600,719,-600,-600,-600,-600,-600,720,240,557,556,555,-281', '558,519,520,534,237,716,-281,540,239,238,235,236,216,217,924,-281,584', '-600,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600', '397,716,-600,-600,-600,213,787,-600,216,217,-600,588,516,-600,-600,589', '-600,240,-600,611,-600,514,-600,-600,-600,-600,-600,-600,-600,615,-600', '-600,-600,254,255,956,618,557,556,555,621,558,216,217,628,-600,-600', '-600,-600,237,-600,243,-600,239,238,235,236,848,819,-103,174,185,175', '198,171,191,181,180,201,202,196,179,178,173,199,203,204,183,172,186', '190,192,184,177,-265,630,220,193,200,195,194,187,197,182,170,189,188', '116,117,118,119,120,169,176,167,168,164,165,166,124,126,634,635,125', '271,956,240,557,556,555,646,558,158,159,240,154,136,137,138,145,142', '144,254,255,139,140,240,240,240,160,161,146,147,720,220,557,556,555', '237,558,220,220,239,238,235,236,151,150,-85,135,157,153,152,148,149', '143,141,133,156,134,-290,677,162,91,871,872,220,-290,873,107,108,716', '-597,92,530,720,-290,557,556,555,719,558,155,688,694,695,698,163,174', '185,175,198,171,191,181,180,201,202,196,179,178,173,199,203,204,183', '172,186,190,192,184,177,500,716,704,193,200,195,194,187,197,182,170', '189,188,116,117,118,119,120,169,176,167,168,164,165,166,124,126,707', '708,125,710,712,240,116,117,118,119,120,158,159,714,154,136,137,138', '145,142,144,254,255,139,140,723,724,725,160,161,146,147,720,727,557', '556,555,237,558,243,584,239,238,235,236,151,150,734,135,157,153,152', '148,149,143,141,133,156,134,764,765,162,-290,766,213,-266,772,485,485', '-290,716,587,220,720,-597,557,556,555,-290,558,585,155,790,259,498,500', '163,174,185,175,198,171,191,181,180,201,202,196,179,178,173,199,203', '204,183,172,186,190,192,184,177,716,688,220,193,200,195,194,187,197', '182,170,189,188,271,271,688,240,240,169,176,167,168,164,165,166,124', '126,819,720,125,557,556,555,213,558,220,220,842,158,159,959,154,136', '137,138,145,142,144,220,747,139,140,-515,-516,-515,160,161,146,147,-515', '-516,-515,819,852,220,-267,716,879,-515,-516,-515,882,151,150,707,135', '157,153,152,148,149,143,141,133,156,134,-516,213,162,91,-291,-281,885', '-516,1009,888,890,-291,-281,92,892,220,-516,1007,894,895,-291,-281,155', '688,903,-265,907,163,174,185,175,198,171,191,181,180,201,202,196,179', '178,173,199,203,204,183,172,186,190,192,184,177,909,910,220,193,200', '195,194,187,197,182,170,189,188,707,913,915,917,919,169,176,167,168', '164,165,166,124,126,919,220,125,925,927,929,213,220,939,940,220,158', '159,212,154,136,137,138,145,142,144,943,210,139,140,-290,-291,-291,160', '161,146,147,-290,-291,-291,-268,953,-597,960,961,963,-290,-291,-291', '964,151,150,980,135,157,153,152,148,149,143,141,133,156,134,213,213', '162,91,982,983,987,959,449,707,992,994,996,92,998,998,747,450,1005,1010', '1011,919,155,919,919,1016,980,163,174,185,175,198,171,191,181,180,201', '202,196,179,178,173,199,203,204,183,172,186,190,192,184,177,-597,-596', '694,193,200,195,194,187,197,182,170,189,188,980,1039,1040,1041,1042', '169,176,167,168,164,165,166,124,126,394,393,125,998,395,998,998,220', '919,980,3,158,159,,154,136,137,138,145,142,144,,,139,140,,,,160,161', '146,147,,,,,,,,,,,,,,151,150,,135,157,153,152,148,149,143,141,133,156', '134,,,162,,,,,,,,,,,,,,,,,,,,155,,,,,163,174,185,175,198,171,191,181', '180,201,202,196,179,178,173,199,203,204,183,172,186,190,192,184,177', ',,,193,200,195,363,362,364,361,170,189,188,,,,,,169,176,167,168,358', '359,360,356,126,97,96,357,,99,,,,,,,158,159,,154,136,137,138,145,142', '144,,,139,140,,,,160,161,146,147,,,,,,370,,,,,,,,151,150,,135,157,153', '152,148,149,143,141,133,156,134,,,162,,,,,,,,,,,,,,,,,,,,155,,,,,163', '174,185,175,198,171,191,181,180,201,202,196,179,178,173,199,203,204', '183,172,186,190,192,184,177,,,,193,200,195,194,187,197,182,170,189,188', ',,,,,169,176,167,168,164,165,166,124,126,123,,125,,,,,,,,,158,159,,154', '136,137,138,145,142,144,,,139,140,,,,160,161,146,147,,,,,,,,,,,,,,151', '150,,135,157,153,152,148,149,143,141,133,156,134,,,162,91,,,,,,,,,,92', '292,72,73,74,12,60,,,155,66,67,,,163,70,,68,69,71,33,34,75,76,,,,,,32', '31,30,101,100,102,103,,,22,,,,,647,11,48,,13,105,104,106,95,59,97,96', '98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,257', '252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239', '238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,-242', ',,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,101,100,102,103,,,22,,,,,631,11,48,,13,105,104,106', '95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246', '248,256,257,252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63,,38,237', ',243,47,239,238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84', '92,,258,,,,,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,647,11,48,,13,105', '104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250', '251,246,248,256,257,252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63', ',38,237,,243,47,239,238,235,236,247,245,241,23,242,,,,91,83,85,86,87', '89,,,,84,92,,258,,,,,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70', ',68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48', ',13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244', '249,250,251,246,248,256,257,252,253,,233,234,,,254,255,,43,,,36,,,61', '62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23,242,,,,91,83', '85,86,87,89,,,,84,92,220,258,,,,,65,,,81,88,90,292,72,73,74,12,60,,', ',66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22', ',,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', '44,240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254,255,,43', ',,294,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23,242', ',,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81,88,90,292,72,73,74,12', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', ',,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', '46,44,240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254,255', ',43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23', '242,,,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81,88,90,292,72,73,74', '12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102', '103,,,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94', ',45,46,44,240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254', '255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241', '23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81,88,90,8,72,73', '74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100', '102,103,,,22,,,,,,11,48,10,13,105,104,106,95,59,97,96,98,,99,107,108', ',93,94,,45,46,44,240,244,249,250,251,246,248,256,257,252,253,,233,234', ',,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247', '245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81,88,90', '292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107', '108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,257,252,253,,233', '234,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236', '247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81,88', '90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99', '107,108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,257,252,253', ',233,234,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235', '236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81', '88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32', '31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98', ',99,107,108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,257,252', '253,,233,234,,,254,255,,43,,,294,,,61,62,,,63,,38,237,,243,47,239,238', '235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,,,,65', ',,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', ',,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97', '96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,257', '252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239', '238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,258,,', ',,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95', '59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246,248', '256,257,252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243', '47,239,238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92', ',258,,,,,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106', '95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246', '248,256,257,252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63,,38,237', ',243,47,239,238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84', '92,,258,,,,,65,,,81,88,90,8,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,10,13,105', '104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250', '251,246,248,256,257,252,253,,233,234,,,254,255,,43,,,36,,,61,62,,,63', ',38,237,,243,47,239,238,235,236,247,245,241,23,242,,,,91,83,85,86,87', '89,,,,84,92,,258,,,,,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70', ',68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48', ',13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,244', '249,250,251,246,248,256,257,252,253,,233,234,,,254,255,,43,,,36,,,61', '62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23,242,,,,91,83', '85,86,87,89,,,,84,92,,258,,,,,65,,,81,88,90,292,72,73,74,12,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,', ',,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44', '240,244,249,250,251,246,248,256,257,252,253,,233,234,,,254,255,,43,', ',36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23,242', ',,,91,83,85,86,87,89,,,,84,92,,258,,,,,65,,,81,88,90,292,72,73,74,12', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', ',,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', '46,44,240,-620,-620,-620,-620,246,248,,,-620,-620,,,,,,254,255,,43,', ',36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23,242', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,292,72,73,74,12,60', ',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,', ',22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', '46,44,240,-620,-620,-620,-620,246,248,,,-620,-620,,,,,,254,255,,43,', ',36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23,242', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,292,72,73,74,12,60', ',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,', ',22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', '46,44,240,244,249,250,251,246,248,256,257,252,253,,-620,-620,,,254,255', ',43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241,23', '242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,292,72,73,74,12', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', ',,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', '46,44,240,,,,,,,,,,,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243', '47,239,238,235,236,,,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,', '65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59', '97,96,98,,99,107,108,,93,94,,45,46,44,240,-620,-620,-620,-620,246,248', ',,-620,-620,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238', '235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,', ',,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97', '96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246,248,,,252', '253,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236', '247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', '292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107', '108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,,252,253,,,,,,254', '255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,247,245,241', '23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,292,72,73,74', '12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102', '103,,,22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94', ',45,46,44,240,,,,,,,,,,,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,', '243,47,239,238,235,236,,,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,', ',,,,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106', '95,59,97,96,98,,99,107,108,,93,94,,45,46,44,240,,,,,,,,,,,,,,,,254,255', ',43,,,36,,,61,62,,,63,,38,237,,243,47,239,238,235,236,,,241,23,242,', ',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,292,72,73,74,12,60', ',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,', ',22,,,,,,11,48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', '46,44,240,,,,,,,,,,,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243', '47,239,238,235,236,,,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,', '65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59', '97,96,98,,99,107,108,,93,94,,45,46,44,240,-620,-620,-620,-620,246,248', ',,-620,-620,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239,238', '235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,', ',,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95,59,97', '96,98,,99,107,108,,93,94,,45,46,44,240,244,249,250,251,246,248,256,257', '252,253,,-620,-620,,,254,255,,43,,,294,,,61,62,,,63,,38,237,,243,47', '239,238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,', ',,,65,,,81,88,90,292,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95', '59,97,96,98,,99,107,108,,93,94,,45,46,44,240,-620,-620,-620,-620,246', '248,,,-620,-620,,,,,,254,255,,43,,,36,,,61,62,,,63,,38,237,,243,47,239', '238,235,236,247,245,241,23,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,', '305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96', '98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62', ',720,63,557,556,555,564,558,47,,,,,,,,230,566,,,,91,83,85,86,87,89,', ',,84,92,,,,,,,65,562,,81,88,90,72,73,74,,60,,574,573,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,567,,,48,,,105', '104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,', ',,,225,,,231,,,61,62,,720,63,557,556,555,802,558,47,,,,,,,,23,566,,', ',91,83,85,86,87,89,,,,84,92,,,,,,,65,562,,81,88,90,72,73,74,,60,,574', '573,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', ',,232,,,,567,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94', ',45,46,44,240,-620,-620,-620,-620,246,248,,,-620,-620,,,,,,254,255,', '225,,,231,,,61,62,,,63,,283,237,281,243,47,239,238,235,236,247,245,241', '230,242,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', '102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93', '94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,720,63,557,556,555', '564,558,47,,,,,,,,230,566,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,562', ',81,88,90,72,73,74,,60,,574,573,66,67,,,,70,,68,69,71,309,310,75,76', ',,,,,305,306,312,101,100,102,103,,,232,,,,567,,,48,,,105,104,106,95', '59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231', ',,61,62,,720,63,557,556,555,564,558,47,,,,,,,,230,566,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,562,,81,88,90,72,73,74,,60,,574,573,66,67,,', ',70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,232,,,,567', ',,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,', ',,,,,,,,,,,,,,225,,,231,,,61,62,,720,63,557,556,555,564,558,47,,,,,', ',,230,566,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,562,,81,88,90,72,73', '74,,60,,574,573,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312', '101,100,102,103,,,232,,,,567,,,48,,,105,104,106,95,59,97,96,98,,99,107', '108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,720,63,557', '556,555,802,558,47,,,,,,,,230,566,,,,91,83,85,86,87,89,,,,84,92,,,,', ',,65,562,,81,88,90,72,73,74,,60,,574,573,66,67,,,,70,,68,69,71,309,310', '75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,567,,,48,,,105,104,106', '95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', ',231,,,61,62,,720,63,557,556,555,802,558,47,,,,,,,,230,566,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,562,,81,88,90,72,73,74,,60,,574,573,66', '67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', '232,,,,567,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45', '46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,720,63,557,556,555,802,558', '47,,,,,,,,230,566,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,562,,81,88', '90,72,73,74,,60,,574,573,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305', '306,312,101,100,102,103,,,232,,,,567,,,48,,,105,104,106,95,59,97,96', '98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62', ',720,63,557,556,555,564,558,47,,,,,,,,230,566,,,,91,83,85,86,87,89,', ',,84,92,,,,,,,65,562,,81,88,90,72,73,74,,60,,574,573,66,67,,,,70,,68', '69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,567,,', '48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,', ',,,,,,,,,,,,225,,,231,,,61,62,,720,63,557,556,555,802,558,47,,,,,,,', '230,566,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,562,,81,88,90,72,73,74', ',60,,574,573,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101', '100,102,103,,,232,,,,567,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', ',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,', ',,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', ',,232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45', '46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281,,47,,,,,,', ',230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', ',,232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45', '46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281,,47,,,,,,', ',230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', ',,232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45', '46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281,,47,,,,,,', ',230,,,,,91,83,85,86,87,89,,,,84,92,220,,,,,,65,,286,81,88,90,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102', '103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94', ',45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281,,47,,', ',,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102', '103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94', ',45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281,,47,,', ',,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', '102,103,,,232,,,,,,,307,,,105,104,106,95,59,97,96,98,,99,107,108,,93', '94,,,,313,,,,,,,,,,,,,,,,,,,,897,,,231,,,61,62,,,63,,,,,,,,,,,,,,,,', ',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', '232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', '44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', '91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,232,,,,', ',,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45,46,44,,', ',,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281,,47,,,,,,,,230,,,', ',91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', '232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', '44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', '91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232', ',,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,', ',,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,12,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11', '48,,13,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,', ',,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,307', ',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,,,313,,,,,,,,,,,,,', ',,,,,,303,,,299,,,61,62,,,63,,298,,,,,,,,,,,,,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', '310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,307,,,105,104', '106,95,59,97,96,98,,99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,303', ',,231,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,315', ',,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76', ',,,,,305,306,312,101,100,102,103,,,232,,,,,,,307,,,105,104,106,95,59', '97,96,98,,99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,303,,,231,,,61', '62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,512,,,65,,,81', '88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '101,100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', ',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', ',,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', '44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,', ',70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,', ',,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45,46,44', ',,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,281,,47,,,,,,,,230,,,,', '91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', '232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', '44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', '91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232', ',,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,', ',,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70', ',68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,', ',307,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,,,313,,,,,,,,', ',,,,,,,,,,,897,,,231,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', '310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104', '106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225', ',,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75', '76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,307,,,105,104,106,95', '59,97,96,98,,99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,303,,,299,', ',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305', '306,312,101,100,102,103,,,232,,,,,,,307,,,105,104,106,95,59,97,96,98', ',99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,970,,,231,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72', '73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101', '100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', ',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,', ',,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', '102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93', '94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,671,,,,47,,', ',,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', '102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93', '94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,530,,61,62,,,63,,,,,,47,,', ',,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', ',,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', '44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,', ',70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,', ',,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45,46,44', ',,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,', ',48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,', ',,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,,48,,,105,104', '106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225', ',,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75', '76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95', '59,97,96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', ',231,,,61,62,,,63,,283,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95', '59,97,96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', ',231,,,61,62,,,63,,283,,281,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,', '84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,,48,,,105,104,106,95', '59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231', ',,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', '65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', ',32,31,30,101,100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96,98', ',99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,', '63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306', '312,101,100,102,103,,,232,,,,,,,307,,,105,104,106,590,59,97,96,591,', '99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,592,,,231,,,61,62,,,63,', ',,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', '102,103,,,232,,,,,,,307,,,105,104,106,590,59,97,96,591,,99,107,108,', '93,94,,,,313,,,,,,,,,,,,,,,,,,,,592,,,231,,,61,62,,,63,,,,,,,,,,,,,', ',,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22', ',,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,', ',,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,113,,,,,112,65,,,81,88,90,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232', ',,,,,,307,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,,,313,,,', ',,,,,,,,,,,,,,,,348,,,36,,,61,62,,,63,,38,,,,,,,,,,,,,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,10,13', '105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,', ',,,,,,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', '310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104', '106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225', ',,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', '96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,', ',61,62,,,63,,283,,281,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310', '75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106', '95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', ',231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75', '76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95', '59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231', ',,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,', ',,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', '96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61', '62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32', '31,30,101,100,102,103,,,22,,,,,,11,48,10,13,105,104,106,95,59,97,96', '98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,', ',63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,397,65,', ',81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32', '31,30,101,100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99', '107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,', ',,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101', '100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,', '93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,', ',,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', ',,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', '44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,', ',70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,,48', ',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,', ',,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87', '89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,12,60,,,,66,67,,,,70,,68,69', '71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105', '104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,', ',,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', '310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104', '106,95,59,97,96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,', ',,225,,,231,,,61,62,,,63,,671,,281,,47,,,,,,,,230,,,,,91,83,85,86,87', '89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105', '104,106,95,59,97,96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,', ',,,,,,225,,,231,,,61,62,,,63,,,,281,,47,,,,,,,,230,,,,,91,83,85,86,87', '89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105', '104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,', ',,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,', ',,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', '310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104', '106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225', ',,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,11,48,,13,105,104,106,95', '59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36', ',,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,', ',397,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', '96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61', '62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305', '306,312,101,100,102,103,,,232,,,,,,,307,,,105,104,106,95,59,97,96,98', ',99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,303,,,299,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72', '73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100', '102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,', '93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,281', ',47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101', '100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', ',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,413,,,,47', ',,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', '102,103,,,232,,,,,,,307,,,105,104,106,95,59,97,96,98,,99,107,108,,93', '94,,,,313,,,,,,,,,,,,,,,,,,,,303,,,299,,,61,62,,,63,,,,,,,,,,,,,,,,', ',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,232,', ',,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,', ',,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70', ',68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,', ',48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,', ',,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48', ',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,', ',,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87', '89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105', '104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,', ',,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,', ',,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,,48,,,105,104,106,95', '59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231', ',,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', '65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', ',32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98', '285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62', ',,63,,283,,281,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,', ',,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', '96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,', ',61,62,,,63,,671,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,', ',,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75', '76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95', '59,97,96,98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', ',231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59', '97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,', ',61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', '65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', ',32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98', ',99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,', '63,,413,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '101,100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', ',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103', ',,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', '44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,', ',70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,,48', ',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,', ',,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87', '89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,101,100,102,103,,,22,,,,,,,48,,,105,104,106', '95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', ',231,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,220', ',,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75', '76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95', '59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231', ',,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,', ',,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96', '98,285,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61', '62,,,63,,283,,281,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,', ',,65,,286,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,101,100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96', '98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62', ',,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '101,100,102,103,,,22,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', ',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', '102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93', '94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,', ',,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102', '103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,', '45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', '232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', '44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,769,,,,47,,,,,,,,230,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', '232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', '44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', '91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232', ',,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,', ',,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70', ',68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,', ',48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45,46,44,,,', ',,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,671,,281,,47,,,,,,,,230,,,,', '91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', '232,,,,,,,48,,,105,104,106,95,59,97,96,98,285,99,107,108,,93,94,,45', '46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,281,,47,,,,,,,,230', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,286,81,88,90,72,73,74,,60,', ',,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,', '232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', '44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', '91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101,100,102,103,,,232,,,,', ',,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,', ',,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48', ',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,', ',,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87', '89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106', '95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,', ',231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', '96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61', '62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305', '306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98', ',99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,', '63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,101', '100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', ',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,', ',,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100', '102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93', '94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,', ',,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102', '103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,', '45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,', '232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', '44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', '91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232', ',,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,', ',,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70', ',68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,', ',48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,', ',,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48', ',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,', ',,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87', '89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105', '104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,', ',,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,', ',,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', '310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,307,,,105,104', '106,95,59,97,96,98,,99,107,108,,93,94,,,,313,,,,,,,,,,,,,,,,,,,,303', ',,299,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,', ',,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76', ',,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59', '97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,', ',61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', '65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,', ',,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', '96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61', '62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305', '306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98', ',99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,', '63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306', '312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99', '107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,', ',,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312', '101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107', '108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,', '47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72', '73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101', '100,102,103,,,232,,,,,,,307,,,105,104,106,95,59,97,96,98,,99,107,108', ',93,94,,,,313,,,,,,,,,,,,,,,,,,,,303,,,299,,,61,62,,,63,,,,,,,,,,,,', ',,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,', ',66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103', ',,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46', '44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,', '91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232', ',,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,', ',,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70', ',68,69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,', ',48,,,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,', ',,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48', ',,105,104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,', ',,,,,,,,,225,,,231,,,61,62,,,63,,413,,,,47,,,,,,,,230,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,309,310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105', '104,106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,', ',,,225,,,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,', ',,84,92,,,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309', '310,75,76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104', '106,95,59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225', ',,231,,,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75', '76,,,,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95', '59,97,96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231', ',,61,62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,', ',,,,305,306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97', '96,98,,99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61', '62,,,63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305', '306,312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98', ',99,107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,', '63,,,,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306', '312,101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99', '107,108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,', ',,,,47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312', '101,100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107', '108,,93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,,,,', '47,,,,,,,,230,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,72', '73,74,,60,,,,66,67,,,,70,,68,69,71,309,310,75,76,,,,,,305,306,312,101', '100,102,103,,,232,,,,,,,48,,,105,104,106,95,59,97,96,98,,99,107,108', ',93,94,,45,46,44,,,,,,,,,,,,,,,,,,,,225,,,231,,,61,62,,,63,,283,,,,47', ',,,,,,,230,,,,-282,91,83,85,86,87,89,-282,-282,-282,84,92,-282,-282', '-282,,-282,,65,,,81,88,90,,,-282,-282,-282,,,,,,,,-282,-282,,-282,-282', '-282,-282,-282,,,,,,,,,,,,,,,,,,,,,,,,-282,-282,-282,-282,-282,-282', '-282,-282,-282,-282,-282,-282,-282,-282,,,-282,-282,-282,,,-282,,,-282', ',,-282,-282,,-282,,-282,,-282,,-282,-282,-282,-282,-282,-282,-282,,-282', ',-282,,,,,,,,,,,,,-282,-282,-282,-282,-602,-282,,-282,,,,-602,-602,-602', ',,-602,-602,-602,560,-602,557,556,555,564,558,,,,-602,-602,-602,-602', ',,566,,,,,-602,-602,,-602,-602,-602,-602,-602,,,,,,,,,,562,755,,,,,', ',,571,570,574,573,,-602,-602,-602,-602,-602,-602,-602,-602,-602,-602', '-602,-602,-602,-602,,,-602,-602,-602,,,-602,,,-602,,,-602,-602,,-602', '567,-602,,-602,,-602,-602,-602,-602,-602,-602,-602,,-602,-602,-602,', ',,,,,,,,,,,-602,-602,-602,-602,-601,-602,,-602,,,,-601,-601,-601,,,-601', '-601,-601,801,-601,557,556,555,802,558,,,,-601,-601,-601,-601,,,566', ',,,,-601,-601,,-601,-601,-601,-601,-601,,,,,,,,,,562,,,,,,,,,571,570', '574,573,,-601,-601,-601,-601,-601,-601,-601,-601,-601,-601,-601,-601', '-601,-601,,,-601,-601,-601,,,-601,,,-601,,,-601,-601,,-601,567,-601', ',-601,,-601,-601,-601,-601,-601,-601,-601,,-601,-601,-601,,,,,,,,,,', ',,-601,-601,-601,-601,-298,-601,,-601,,,,-298,-298,-298,,,-298,-298', '-298,560,-298,557,556,555,564,558,,,,,-298,-298,,,,566,,,,,-298,-298', ',-298,-298,-298,-298,-298,,,,,,,,,,562,,,,,,,,,571,570,574,573,,-298', '-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,-298,,,-298', '-298,-298,,,-298,,274,-298,,,-298,-298,,-298,567,-298,,-298,,-298,-298', '-298,-298,-298,-298,-298,,-298,,-298,,,,,,,,,,,,-619,-298,-298,,-298', ',-298,-619,-619,-619,,,-619,-619,-619,801,-619,557,556,555,802,558,', ',,-619,-619,-619,,,,566,,,,,-619,-619,,-619,-619,-619,-619,-619,,,,', ',,,,,562,,,,,,,,,571,570,574,573,,-619,-619,-619,-619,-619,-619,-619', '-619,-619,-619,-619,-619,-619,-619,,,-619,-619,-619,,,-619,,271,-619', ',,-619,-619,,-619,567,-619,,-619,,-619,-619,-619,-619,-619,-619,-619', ',-619,-619,-619,,,,,,,,,,,,-427,-619,-619,,-619,,-619,-427,-427,-427', ',,-427,-427,-427,801,-427,557,556,555,802,558,,,,-427,-427,-427,,,,566', ',,,,-427,-427,,-427,-427,-427,-427,-427,,,,,,,,,,562,,,,,,,,,571,570', '574,573,,-427,-427,-427,-427,-427,-427,-427,-427,-427,-427,-427,-427', '-427,-427,,,-427,-427,-427,,,-427,,271,-427,,,-427,-427,,-427,567,-427', ',-427,,-427,-427,-427,-427,-427,-427,-427,,-427,-427,-427,,,,,,,,,,', ',-619,-427,-427,,-427,,-427,-619,-619,-619,,,-619,-619,-619,560,-619', '557,556,555,564,558,,,,-619,-619,,,,,566,,,,,-619,-619,,-619,-619,-619', '-619,-619,,,,,,,,,,562,,,,,,,,,571,570,574,573,,,,,,,,,,,,,-619,,,,', ',,-619,,,,,271,-619,,,,,,,567,,,,1034,433,,,1035,,,,,,-619,-619,,158', '159,,154,136,137,138,145,142,144,,-619,139,140,,,-619,160,161,146,147', ',,,,,271,,,,,,,,151,150,,135,157,153,152,148,149,143,141,133,156,134', ',,162,,,,,,,,,,684,433,,,685,,,,,,155,,,158,159,163,154,136,137,138', '145,142,144,,,139,140,,,,160,161,146,147,,,,,,271,,,,,,,,151,150,,135', '157,153,152,148,149,143,141,133,156,134,,,162,,,,,,,,,,737,426,,,738', ',,,,,155,,,158,159,163,154,136,137,138,145,142,144,,,139,140,,,,160', '161,146,147,,,,,,271,,,,,,,,151,150,,135,157,153,152,148,149,143,141', '133,156,134,,,162,,,,,,,,,,1004,433,,,1003,,,,,,155,,,158,159,163,154', '136,137,138,145,142,144,,,139,140,,,,160,161,146,147,,,,,,271,,,,,,', ',151,150,,135,157,153,152,148,149,143,141,133,156,134,,,162,,,,,,,,', ',483,426,,,484,,,,,,155,,,158,159,163,154,136,137,138,145,142,144,,', '139,140,,,,160,161,146,147,,,,,,271,,,,,,,,151,150,,135,157,153,152', '148,149,143,141,133,156,134,,,162,,,,,,,,,,1032,426,,,1033,,,,,,155', ',,158,159,163,154,136,137,138,145,142,144,,,139,140,,,,160,161,146,147', ',,,,,271,,,,,,,,151,150,,135,157,153,152,148,149,143,141,133,156,134', ',,162,,,,,,,,,,649,426,,,650,,,,,,155,,,158,159,163,154,136,137,138', '145,142,144,,,139,140,,,,160,161,146,147,,,,,,271,,,,,,,,151,150,,135', '157,153,152,148,149,143,141,133,156,134,,,162,,,,,,,,,,651,433,,,652', ',,,,,155,,,158,159,163,154,136,137,138,145,142,144,,,139,140,,,,160', '161,146,147,,,,,,271,,,,,,,,151,150,,135,157,153,152,148,149,143,141', '133,156,134,,,162,,,,,,,,,,649,426,,,650,,,,,,155,,,158,159,163,154', '136,137,138,145,142,144,,,139,140,,,,160,161,146,147,,,,,,271,,,,,,', ',151,150,,135,157,153,152,148,149,143,141,133,156,134,,,162,,,,,,,,', ',856,433,,,857,,,,,,155,,,158,159,163,154,136,137,138,145,142,144,,', '139,140,,,,160,161,146,147,,,,,,271,,,,,,,,151,150,,135,157,153,152', '148,149,143,141,133,156,134,,,162,,,,,,,,,,681,426,,,682,,,,,,155,,', '158,159,163,154,136,137,138,145,142,144,,,139,140,,,,160,161,146,147', ',,,,,271,,,,,,,,151,150,,135,157,153,152,148,149,143,141,133,156,134', ',,162,,,,,,,,,,429,433,,,428,,,,,,155,,,158,159,163,154,136,137,138', '145,142,144,,,139,140,,,,160,161,146,147,,,,,,271,,,,,,,,151,150,,135', '157,153,152,148,149,143,141,133,156,134,,,162,,,,,,,,,,422,426,,,423', ',,,,,155,,,158,159,163,154,136,137,138,145,142,144,,,139,140,,,,160', '161,146,147,,,,,,271,,,,,,,,151,150,,135,157,153,152,148,149,143,141', '133,156,134,,,162,,,,,,,,,,651,433,,,652,,,,,,155,,,158,159,163,154', '136,137,138,145,142,144,,,139,140,,,,160,161,146,147,,,,,,271,,,,,,', ',151,150,,135,157,153,152,148,149,143,141,133,156,134,,,162,,,,,,,,', ',739,433,,,740,,,,,,155,,,158,159,163,154,136,137,138,145,142,144,,', '139,140,,,,160,161,146,147,,,,,,271,,,,,,,,151,150,,135,157,153,152', '148,149,143,141,133,156,134,,560,162,557,556,555,564,558,,,,,483,426', ',,484,566,,,,,155,,,158,159,163,154,136,137,138,145,142,144,,,139,140', '562,,,160,161,146,147,,,571,570,574,573,,,,,,,,151,150,,135,157,153', '152,148,149,143,141,133,156,134,,560,162,557,556,555,564,558,,,,567', ',,,,,566,,,,,155,,,,560,163,557,556,555,564,558,,,,,,,562,,560,566,557', '556,555,564,558,571,570,574,573,,,,,560,566,557,556,555,564,558,,562', '755,,,,,,,566,571,570,574,573,,,562,546,,,,567,,,,571,570,574,573,,', '562,,,,,,,,,571,570,574,573,,,567,,,,,,,,,,,,,,,567,,,,,,,,,,,,,,,567' ] racc_action_table = arr = ::Array.new(25662, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '429,1032,1033,339,663,906,308,429,429,429,446,446,451,429,429,1049,429', '596,61,320,758,758,676,737,476,429,320,29,616,1047,928,338,490,676,390', '320,429,429,663,429,429,429,429,429,592,3,692,692,592,738,346,345,588', '61,349,853,476,1034,581,64,476,476,476,476,13,451,490,429,429,429,429', '429,429,429,429,429,429,429,429,429,429,580,855,429,429,429,854,429', '662,616,616,429,29,308,429,390,390,390,616,429,446,429,545,429,429,429', '429,429,429,429,758,429,429,429,29,1032,1033,339,739,906,1032,1033,339', '596,906,652,429,429,737,429,15,429,652,652,652,1034,692,652,652,652', '429,652,596,1047,928,338,64,596,1047,928,338,652,652,652,738,346,345', '588,581,349,16,652,652,581,652,652,652,652,652,853,681,1034,853,740', '853,662,1034,385,22,19,80,580,855,682,739,388,580,855,80,752,752,854', '652,652,652,652,652,652,652,652,652,652,652,652,652,652,5,545,652,652', '652,5,652,652,22,376,652,422,376,652,652,223,652,739,652,25,652,789', '652,652,652,652,652,652,652,40,652,681,652,740,385,719,613,719,719,719', '43,719,388,590,682,652,652,652,652,95,652,224,652,422,226,48,95,95,95', '652,489,95,95,95,422,95,681,481,223,681,376,376,740,95,789,95,95,95', '814,682,681,331,682,72,331,95,95,87,95,95,95,95,95,682,489,362,590,613', '613,88,756,481,362,590,224,756,613,226,590,123,649,650,590,719,123,123', '95,95,95,95,95,95,95,95,95,95,95,95,95,95,590,814,95,95,95,372,95,95', '814,374,95,317,27,95,95,89,95,814,95,27,95,90,95,95,95,95,95,95,95,985', '95,985,95,649,650,814,924,379,924,924,924,121,924,591,684,95,95,95,95', '98,95,330,95,317,330,289,98,98,98,95,289,98,98,98,317,98,372,372,372', '205,374,374,374,98,458,98,98,98,937,863,358,225,856,937,863,98,98,358', '98,98,98,98,98,227,882,228,591,684,379,379,379,232,382,591,684,882,458', '264,591,684,458,458,591,684,924,267,98,98,98,98,98,98,98,98,98,98,98', '98,98,98,591,684,98,98,98,856,98,98,882,882,98,278,856,98,98,279,98', '856,98,632,98,856,98,98,98,98,98,98,98,704,98,359,98,382,382,382,363', '357,359,856,704,18,882,363,357,98,98,98,98,428,98,41,98,42,282,423,428', '428,428,98,285,632,428,428,658,428,658,658,658,658,658,49,632,704,704', '364,751,366,49,293,658,751,364,18,366,428,428,49,428,428,428,428,428', '41,18,42,360,423,697,44,44,697,658,360,41,457,42,704,423,295,342,658', '658,658,658,342,428,428,428,428,428,428,428,428,428,428,428,428,428', '428,296,361,428,428,428,297,428,457,361,658,428,457,457,428,356,303', '954,658,428,954,428,356,428,428,428,428,428,428,428,306,428,543,428', '594,543,562,307,562,562,562,594,562,707,707,651,428,428,312,428,594', '428,651,651,651,726,726,651,651,651,428,651,842,314,842,842,842,477', '842,318,651,651,651,651,562,506,506,506,506,506,319,651,651,562,651', '651,651,651,651,978,322,978,978,978,304,978,313,313,328,477,842,304', '332,477,477,477,477,337,337,842,304,343,651,651,651,651,651,651,651', '651,651,651,651,651,651,651,344,978,651,651,651,302,651,651,20,20,651', '348,302,651,651,350,651,463,651,378,651,302,651,651,651,651,651,651', '651,381,651,651,651,463,463,1002,384,1002,1002,1002,387,1002,533,533', '409,651,651,651,651,463,651,463,651,463,463,463,463,1018,1018,651,404', '404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404', '404,404,404,404,404,404,411,414,417,404,404,404,404,404,404,404,404', '404,404,291,291,291,291,291,404,404,404,404,404,404,404,404,404,420', '421,404,430,894,465,894,894,894,438,894,404,404,459,404,404,404,404', '404,404,404,465,465,404,404,460,461,462,404,404,404,404,716,491,716', '716,716,465,716,492,507,465,465,465,465,404,404,508,404,404,404,404', '404,404,404,404,404,404,404,685,511,404,404,759,759,513,685,759,759', '759,716,685,404,518,980,685,980,980,980,716,980,404,522,531,532,541', '404,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757', '757,757,757,757,757,757,757,757,544,980,548,757,757,757,757,757,757', '757,757,757,757,9,9,9,9,9,757,757,757,757,757,757,757,757,757,549,551', '757,552,553,464,675,675,675,675,675,757,757,560,757,757,757,757,757', '757,757,464,464,757,757,568,572,575,757,757,757,757,844,577,844,844', '844,464,844,464,582,464,464,464,464,757,757,583,757,757,757,757,757', '757,757,757,757,757,757,620,623,757,857,625,347,629,633,638,644,857', '844,347,653,925,857,925,925,925,857,925,347,757,655,661,668,670,757', '627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627', '627,627,627,627,627,627,627,925,678,680,627,627,627,627,627,627,627', '627,627,627,683,686,687,690,691,627,627,627,627,627,627,627,627,627', '693,1016,627,1016,1016,1016,958,1016,696,703,718,627,627,958,627,627', '627,627,627,627,627,721,958,627,627,300,301,967,627,627,627,627,300', '301,967,728,733,736,768,1016,773,300,301,967,791,627,627,792,627,627', '627,627,627,627,627,627,627,627,627,968,969,627,627,1010,971,794,968', '969,795,796,1010,971,627,798,799,968,969,800,801,1010,971,627,813,817', '820,821,627,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12', '12,12,12,12,12,826,827,828,12,12,12,12,12,12,12,12,12,12,829,833,834', '836,837,12,12,12,12,12,12,12,12,12,839,841,12,843,846,849,17,859,864', '865,866,12,12,17,12,12,12,12,12,12,12,875,17,12,12,1035,743,517,12,12', '12,12,1035,743,517,876,893,1035,897,898,900,1035,743,517,901,12,12,926', '12,12,12,12,12,12,12,12,12,12,12,896,222,12,12,930,931,936,896,222,944', '947,948,949,12,950,952,896,222,962,970,973,974,12,975,976,977,979,12', '91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91', '91,1003,1004,1006,91,91,91,91,91,91,91,91,91,91,1017,1022,1023,1024', '1025,91,91,91,91,91,91,91,91,91,91,91,91,1026,91,1027,1028,1031,1036', '1037,1,91,91,,91,91,91,91,91,91,91,,,91,91,,,,91,91,91,91,,,,,,,,,,', ',,,91,91,,91,91,91,91,91,91,91,91,91,91,91,,,91,,,,,,,,,,,,,,,,,,,,91', ',,,,91,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74', '74,74,74,,,,74,74,74,74,74,74,74,74,74,74,,,,,,74,74,74,74,74,74,74', '74,74,74,74,74,,74,,,,,,,74,74,,74,74,74,74,74,74,74,,,74,74,,,,74,74', '74,74,,,,,,74,,,,,,,,74,74,,74,74,74,74,74,74,74,74,74,74,74,,,74,,', ',,,,,,,,,,,,,,,,,74,,,,,74,11,11,11,11,11,11,11,11,11,11,11,11,11,11', '11,11,11,11,11,11,11,11,11,11,,,,11,11,11,11,11,11,11,11,11,11,,,,,', '11,11,11,11,11,11,11,11,11,11,,11,,,,,,,,,11,11,,11,11,11,11,11,11,11', ',,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11', '11,11,,,11,11,,,,,,,,,,11,810,810,810,810,810,810,,,11,810,810,,,11', '810,,810,810,810,810,810,810,810,,,,,,810,810,810,810,810,810,810,,', '810,,,,,441,810,810,,810,810,810,810,810,810,810,810,810,,810,810,810', ',810,810,,810,810,810,441,441,441,441,441,441,441,441,441,441,441,,441', '441,,,441,441,,810,,,810,,,810,810,,,810,,810,441,,441,810,441,441,441', '441,441,441,441,810,441,,,,810,810,810,810,810,810,,,,810,810,,441,', '441,,,810,,,810,810,810,899,899,899,899,899,899,,,,899,899,,,,899,,899', '899,899,899,899,899,899,,,,,,899,899,899,899,899,899,899,,,899,,,,,416', '899,899,,899,899,899,899,899,899,899,899,899,,899,899,899,,899,899,', '899,899,899,416,416,416,416,416,416,416,416,416,416,416,,416,416,,,416', '416,,899,,,899,,,899,899,,,899,,899,416,,416,899,416,416,416,416,416', '416,416,899,416,,,,899,899,899,899,899,899,,,,899,899,,416,,,,,899,', ',899,899,899,809,809,809,809,809,809,,,,809,809,,,,809,,809,809,809', '809,809,809,809,,,,,,809,809,809,809,809,809,809,,,809,,,,,654,809,809', ',809,809,809,809,809,809,809,809,809,,809,809,809,,809,809,,809,809', '809,654,654,654,654,654,654,654,654,654,654,654,,654,654,,,654,654,', '809,,,809,,,809,809,,,809,,809,654,,654,809,654,654,654,654,654,654', '654,809,654,,,,809,809,809,809,809,809,,,,809,809,,654,,,,,809,,,809', '809,809,702,702,702,702,702,702,,,,702,702,,,,702,,702,702,702,702,702', '702,702,,,,,,702,702,702,702,702,702,702,,,702,,,,,,702,702,,702,702', '702,702,702,702,702,702,702,,702,702,702,,702,702,,702,702,702,480,480', '480,480,480,480,480,480,480,480,480,,480,480,,,480,480,,702,,,702,,', '702,702,,,702,,702,480,,480,702,480,480,480,480,480,480,480,702,480', ',,,702,702,702,702,702,702,,,,702,702,480,480,,,,,702,,,702,702,702', '294,294,294,294,294,294,,,,294,294,,,,294,,294,294,294,294,294,294,294', ',,,,,294,294,294,294,294,294,294,,,294,,,,,,294,294,,294,294,294,294', '294,294,294,294,294,,294,294,294,,294,294,,294,294,294,780,780,780,780', '780,780,780,780,780,780,780,,780,780,,,780,780,,294,,,294,,,294,294', ',,294,,294,780,,780,294,780,780,780,780,780,780,780,294,780,,,,294,294', '294,294,294,294,,,,294,294,,780,,,,,294,,,294,294,294,753,753,753,753', '753,753,,,,753,753,,,,753,,753,753,753,753,753,753,753,,,,,,753,753', '753,753,753,753,753,,,753,,,,,,753,753,,753,753,753,753,753,753,753', '753,753,,753,753,753,,753,753,,753,753,753,777,777,777,777,777,777,777', '777,777,777,777,,777,777,,,777,777,,753,,,753,,,753,753,,,753,,753,777', ',777,753,777,777,777,777,777,777,777,753,777,,,,753,753,753,753,753', '753,,,,753,753,,777,,,,,753,,,753,753,753,966,966,966,966,966,966,,', ',966,966,,,,966,,966,966,966,966,966,966,966,,,,,,966,966,966,966,966', '966,966,,,966,,,,,,966,966,,966,966,966,966,966,966,966,966,966,,966', '966,966,,966,966,,966,966,966,784,784,784,784,784,784,784,784,784,784', '784,,784,784,,,784,784,,966,,,966,,,966,966,,,966,,966,784,,784,966', '784,784,784,784,784,784,784,966,784,,,,966,966,966,966,966,966,,,,966', '966,,784,,,,,966,,,966,966,966,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2,2', '2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2,,2', '2,2,782,782,782,782,782,782,782,782,782,782,782,,782,782,,,782,782,', '2,,,2,,,2,2,,,2,,2,782,,782,2,782,782,782,782,782,782,782,2,782,,,,2', '2,2,2,2,2,,,,2,2,,782,,,,,2,,,2,2,2,754,754,754,754,754,754,,,,754,754', ',,,754,,754,754,754,754,754,754,754,,,,,,754,754,754,754,754,754,754', ',,754,,,,,,754,754,,754,754,754,754,754,754,754,754,754,,754,754,754', ',754,754,,754,754,754,436,436,436,436,436,436,436,436,436,436,436,,436', '436,,,436,436,,754,,,754,,,754,754,,,754,,754,436,,436,754,436,436,436', '436,436,436,436,754,436,,,,754,754,754,754,754,754,,,,754,754,,436,', ',,,754,,,754,754,754,860,860,860,860,860,860,,,,860,860,,,,860,,860', '860,860,860,860,860,860,,,,,,860,860,860,860,860,860,860,,,860,,,,,', '860,860,,860,860,860,860,860,860,860,860,860,,860,860,860,,860,860,', '860,860,860,881,881,881,881,881,881,881,881,881,881,881,,881,881,,,881', '881,,860,,,860,,,860,860,,,860,,860,881,,881,860,881,881,881,881,881', '881,881,860,881,,,,860,860,860,860,860,860,,,,860,860,,881,,,,,860,', ',860,860,860,299,299,299,299,299,299,,,,299,299,,,,299,,299,299,299', '299,299,299,299,,,,,,299,299,299,299,299,299,299,,,299,,,,,,299,299', ',299,299,299,299,299,299,299,299,299,,299,299,299,,299,299,,299,299', '299,775,775,775,775,775,775,775,775,775,775,775,,775,775,,,775,775,', '299,,,299,,,299,299,,,299,,299,775,,775,299,775,775,775,775,775,775', '775,299,775,,,,299,299,299,299,299,299,,,,299,299,,775,,,,,299,,,299', '299,299,851,851,851,851,851,851,,,,851,851,,,,851,,851,851,851,851,851', '851,851,,,,,,851,851,851,851,851,851,851,,,851,,,,,,851,851,,851,851', '851,851,851,851,851,851,851,,851,851,851,,851,851,,851,851,851,770,770', '770,770,770,770,770,770,770,770,770,,770,770,,,770,770,,851,,,851,,', '851,851,,,851,,851,770,,770,851,770,770,770,770,770,770,770,851,770', ',,,851,851,851,851,851,851,,,,851,851,,770,,,,,851,,,851,851,851,850', '850,850,850,850,850,,,,850,850,,,,850,,850,850,850,850,850,850,850,', ',,,,850,850,850,850,850,850,850,,,850,,,,,,850,850,,850,850,850,850', '850,850,850,850,850,,850,850,850,,850,850,,850,850,850,689,689,689,689', '689,689,689,689,689,689,689,,689,689,,,689,689,,850,,,850,,,850,850', ',,850,,850,689,,689,850,689,689,689,689,689,689,689,850,689,,,,850,850', '850,850,850,850,,,,850,850,,689,,,,,850,,,850,850,850,805,805,805,805', '805,805,,,,805,805,,,,805,,805,805,805,805,805,805,805,,,,,,805,805', '805,805,805,805,805,,,805,,,,,,805,805,,805,805,805,805,805,805,805', '805,805,,805,805,805,,805,805,,805,805,805,24,24,24,24,24,24,24,24,24', '24,24,,24,24,,,24,24,,805,,,805,,,805,805,,,805,,805,24,,24,805,24,24', '24,24,24,24,24,805,24,,,,805,805,805,805,805,805,,,,805,805,,24,,,,', '805,,,805,805,805,403,403,403,403,403,403,,,,403,403,,,,403,,403,403', '403,403,403,403,403,,,,,,403,403,403,403,403,403,403,,,403,,,,,,403', '403,403,403,403,403,403,403,403,403,403,403,,403,403,403,,403,403,,403', '403,403,276,276,276,276,276,276,276,276,276,276,276,,276,276,,,276,276', ',403,,,403,,,403,403,,,403,,403,276,,276,403,276,276,276,276,276,276', '276,403,276,,,,403,403,403,403,403,403,,,,403,403,,276,,,,,403,,,403', '403,403,207,207,207,207,207,207,,,,207,207,,,,207,,207,207,207,207,207', '207,207,,,,,,207,207,207,207,207,207,207,,,207,,,,,,207,207,,207,207', '207,207,207,207,207,207,207,,207,207,207,,207,207,,207,207,207,529,529', '529,529,529,529,529,529,529,529,529,,529,529,,,529,529,,207,,,207,,', '207,207,,,207,,207,529,,529,207,529,529,529,529,529,529,529,207,529', ',,,207,207,207,207,207,207,,,,207,207,,529,,,,,207,,,207,207,207,990', '990,990,990,990,990,,,,990,990,,,,990,,990,990,990,990,990,990,990,', ',,,,990,990,990,990,990,990,990,,,990,,,,,,990,990,,990,990,990,990', '990,990,990,990,990,,990,990,990,,990,990,,990,990,990,878,878,878,878', '878,878,878,878,878,878,878,,878,878,,,878,878,,990,,,990,,,990,990', ',,990,,990,878,,878,990,878,878,878,878,878,878,878,990,878,,,,990,990', '990,990,990,990,,,,990,990,,878,,,,,990,,,990,990,990,231,231,231,231', '231,231,,,,231,231,,,,231,,231,231,231,231,231,231,231,,,,,,231,231', '231,231,231,231,231,,,231,,,,,,231,231,,231,231,231,231,231,231,231', '231,231,,231,231,231,,231,231,,231,231,231,473,473,473,473,473,473,473', ',,473,473,,,,,,473,473,,231,,,231,,,231,231,,,231,,231,473,,473,231', '473,473,473,473,473,473,473,231,473,,,,231,231,231,231,231,231,,,,231', '231,,,,,,,231,,,231,231,231,325,325,325,325,325,325,,,,325,325,,,,325', ',325,325,325,325,325,325,325,,,,,,325,325,325,325,325,325,325,,,325', ',,,,,325,325,,325,325,325,325,325,325,325,325,325,,325,325,325,,325', '325,,325,325,325,471,471,471,471,471,471,471,,,471,471,,,,,,471,471', ',325,,,325,,,325,325,,,325,,325,471,,471,325,471,471,471,471,471,471', '471,325,471,,,,325,325,325,325,325,325,,,,325,325,,,,,,,325,,,325,325', '325,701,701,701,701,701,701,,,,701,701,,,,701,,701,701,701,701,701,701', '701,,,,,,701,701,701,701,701,701,701,,,701,,,,,,701,701,,701,701,701', '701,701,701,701,701,701,,701,701,701,,701,701,,701,701,701,455,455,455', '455,455,455,455,455,455,455,455,,455,455,,,455,455,,701,,,701,,,701', '701,,,701,,701,455,,455,701,455,455,455,455,455,455,455,701,455,,,,701', '701,701,701,701,701,,,,701,701,,,,,,,701,,,701,701,701,579,579,579,579', '579,579,,,,579,579,,,,579,,579,579,579,579,579,579,579,,,,,,579,579', '579,579,579,579,579,,,579,,,,,,579,579,,579,579,579,579,579,579,579', '579,579,,579,579,579,,579,579,,579,579,579,470,,,,,,,,,,,,,,,,470,470', ',579,,,579,,,579,579,,,579,,579,470,,470,579,470,470,470,470,,,470,579', '470,,,,579,579,579,579,579,579,,,,579,579,,,,,,,579,,,579,579,579,989', '989,989,989,989,989,,,,989,989,,,,989,,989,989,989,989,989,989,989,', ',,,,989,989,989,989,989,989,989,,,989,,,,,,989,989,,989,989,989,989', '989,989,989,989,989,,989,989,989,,989,989,,989,989,989,475,475,475,475', '475,475,475,,,475,475,,,,,,475,475,,989,,,989,,,989,989,,,989,,989,475', ',475,989,475,475,475,475,475,475,475,989,475,,,,989,989,989,989,989', '989,,,,989,989,,,,,,,989,,,989,989,989,576,576,576,576,576,576,,,,576', '576,,,,576,,576,576,576,576,576,576,576,,,,,,576,576,576,576,576,576', '576,,,576,,,,,,576,576,,576,576,576,576,576,576,576,576,576,,576,576', '576,,576,576,,576,576,576,478,478,478,478,478,478,478,,,478,478,,,,', ',478,478,,576,,,576,,,576,576,,,576,,576,478,,478,576,478,478,478,478', '478,478,478,576,478,,,,576,576,576,576,576,576,,,,576,576,,,,,,,576', ',,576,576,576,986,986,986,986,986,986,,,,986,986,,,,986,,986,986,986', '986,986,986,986,,,,,,986,986,986,986,986,986,986,,,986,,,,,,986,986', ',986,986,986,986,986,986,986,986,986,,986,986,986,,986,986,,986,986', '986,479,479,479,479,479,479,479,479,,479,479,,,,,,479,479,,986,,,986', ',,986,986,,,986,,986,479,,479,986,479,479,479,479,479,479,479,986,479', ',,,986,986,986,986,986,986,,,,986,986,,,,,,,986,,,986,986,986,981,981', '981,981,981,981,,,,981,981,,,,981,,981,981,981,981,981,981,981,,,,,', '981,981,981,981,981,981,981,,,981,,,,,,981,981,,981,981,981,981,981', '981,981,981,981,,981,981,981,,981,981,,981,981,981,469,,,,,,,,,,,,,', ',,469,469,,981,,,981,,,981,981,,,981,,981,469,,469,981,469,469,469,469', ',,469,981,469,,,,981,981,981,981,981,981,,,,981,981,,,,,,,981,,,981', '981,981,760,760,760,760,760,760,,,,760,760,,,,760,,760,760,760,760,760', '760,760,,,,,,760,760,760,760,760,760,760,,,760,,,,,,760,760,,760,760', '760,760,760,760,760,760,760,,760,760,760,,760,760,,760,760,760,468,', ',,,,,,,,,,,,,,468,468,,760,,,760,,,760,760,,,760,,760,468,,468,760,468', '468,468,468,,,468,760,468,,,,760,760,760,760,760,760,,,,760,760,,,,', ',,760,,,760,760,760,819,819,819,819,819,819,,,,819,819,,,,819,,819,819', '819,819,819,819,819,,,,,,819,819,819,819,819,819,819,,,819,,,,,,819', '819,,819,819,819,819,819,819,819,819,819,,819,819,819,,819,819,,819', '819,819,467,,,,,,,,,,,,,,,,467,467,,819,,,819,,,819,819,,,819,,819,467', ',467,819,467,467,467,467,,,467,819,467,,,,819,819,819,819,819,819,,', ',819,819,,,,,,,819,,,819,819,819,933,933,933,933,933,933,,,,933,933', ',,,933,,933,933,933,933,933,933,933,,,,,,933,933,933,933,933,933,933', ',,933,,,,,,933,933,,933,933,933,933,933,933,933,933,933,,933,933,933', ',933,933,,933,933,933,466,466,466,466,466,466,466,,,466,466,,,,,,466', '466,,933,,,933,,,933,933,,,933,,933,466,,466,933,466,466,466,466,466', '466,466,933,466,,,,933,933,933,933,933,933,,,,933,933,,,,,,,933,,,933', '933,933,36,36,36,36,36,36,,,,36,36,,,,36,,36,36,36,36,36,36,36,,,,,', '36,36,36,36,36,36,36,,,36,,,,,,36,36,,36,36,36,36,36,36,36,36,36,,36', '36,36,,36,36,,36,36,36,456,456,456,456,456,456,456,456,456,456,456,', '456,456,,,456,456,,36,,,36,,,36,36,,,36,,36,456,,456,36,456,456,456', '456,456,456,456,36,456,,,,36,36,36,36,36,36,,,,36,36,,,,,,,36,,,36,36', '36,903,903,903,903,903,903,,,,903,903,,,,903,,903,903,903,903,903,903', '903,,,,,,903,903,903,903,903,903,903,,,903,,,,,,903,903,,903,903,903', '903,903,903,903,903,903,,903,903,903,,903,903,,903,903,903,474,474,474', '474,474,474,474,,,474,474,,,,,,474,474,,903,,,903,,,903,903,,,903,,903', '474,,474,903,474,474,474,474,474,474,474,903,474,,,,903,903,903,903', '903,903,,,,903,903,,,,,,,903,,,903,903,903,256,256,256,,256,,,,256,256', ',,,256,,256,256,256,256,256,256,256,,,,,,256,256,256,256,256,256,256', ',,256,,,,,,,256,,,256,256,256,256,256,256,256,256,,256,256,256,,256', '256,,256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,256,,917,256,917', '917,917,917,917,256,,,,,,,,256,917,,,,256,256,256,256,256,256,,,,256', '256,,,,,,,256,917,,256,256,256,741,741,741,,741,,917,917,741,741,,,', '741,,741,741,741,741,741,741,741,,,,,,741,741,741,741,741,741,741,,', '741,,,,917,,,741,,,741,741,741,741,741,741,741,741,,741,741,741,,741', '741,,741,741,741,,,,,,,,,,,,,,,,,,,,741,,,741,,,741,741,,998,741,998', '998,998,998,998,741,,,,,,,,741,998,,,,741,741,741,741,741,741,,,,741', '741,,,,,,,741,998,,741,741,741,747,747,747,,747,,998,998,747,747,,,', '747,,747,747,747,747,747,747,747,,,,,,747,747,747,747,747,747,747,,', '747,,,,998,,,747,,,747,747,747,747,747,747,747,747,747,747,747,747,', '747,747,,747,747,747,472,472,472,472,472,472,472,,,472,472,,,,,,472', '472,,747,,,747,,,747,747,,,747,,747,472,747,472,747,472,472,472,472', '472,472,472,747,472,,,,747,747,747,747,747,747,,,,747,747,,,,,,,747', ',747,747,747,747,257,257,257,,257,,,,257,257,,,,257,,257,257,257,257', '257,257,257,,,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257,257', '257,257,257,257,257,257,,257,257,257,,257,257,,257,257,257,,,,,,,,,', ',,,,,,,,,,257,,,257,,,257,257,,919,257,919,919,919,919,919,257,,,,,', ',,257,919,,,,257,257,257,257,257,257,,,,257,257,,,,,,,257,919,,257,257', '257,769,769,769,,769,,919,919,769,769,,,,769,,769,769,769,769,769,769', '769,,,,,,769,769,769,769,769,769,769,,,769,,,,919,,,769,,,769,769,769', '769,769,769,769,769,,769,769,769,,769,769,,769,769,769,,,,,,,,,,,,,', ',,,,,,769,,,769,,,769,769,,1011,769,1011,1011,1011,1011,1011,769,,,', ',,,,769,1011,,,,769,769,769,769,769,769,,,,769,769,,,,,,,769,1011,,769', '769,769,771,771,771,,771,,1011,1011,771,771,,,,771,,771,771,771,771', '771,771,771,,,,,,771,771,771,771,771,771,771,,,771,,,,1011,,,771,,,771', '771,771,771,771,771,771,771,,771,771,771,,771,771,,771,771,771,,,,,', ',,,,,,,,,,,,,,771,,,771,,,771,771,,712,771,712,712,712,712,712,771,', ',,,,,,771,712,,,,771,771,771,771,771,771,,,,771,771,,,,,,,771,712,,771', '771,771,258,258,258,,258,,712,712,258,258,,,,258,,258,258,258,258,258', '258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,712,,,258,,,258,258', '258,258,258,258,258,258,,258,258,258,,258,258,,258,258,258,,,,,,,,,', ',,,,,,,,,,258,,,258,,,258,258,,890,258,890,890,890,890,890,258,,,,,', ',,258,890,,,,258,258,258,258,258,258,,,,258,258,,,,,,,258,890,,258,258', '258,785,785,785,,785,,890,890,785,785,,,,785,,785,785,785,785,785,785', '785,,,,,,785,785,785,785,785,785,785,,,785,,,,890,,,785,,,785,785,785', '785,785,785,785,785,,785,785,785,,785,785,,785,785,785,,,,,,,,,,,,,', ',,,,,,785,,,785,,,785,785,,994,785,994,994,994,994,994,785,,,,,,,,785', '994,,,,785,785,785,785,785,785,,,,785,785,,,,,,,785,994,,785,785,785', '786,786,786,,786,,994,994,786,786,,,,786,,786,786,786,786,786,786,786', ',,,,,786,786,786,786,786,786,786,,,786,,,,994,,,786,,,786,786,786,786', '786,786,786,786,,786,786,786,,786,786,,786,786,786,,,,,,,,,,,,,,,,,', ',,786,,,786,,,786,786,,996,786,996,996,996,996,996,786,,,,,,,,786,996', ',,,786,786,786,786,786,786,,,,786,786,,,,,,,786,996,,786,786,786,787', '787,787,,787,,996,996,787,787,,,,787,,787,787,787,787,787,787,787,,', ',,,787,787,787,787,787,787,787,,,787,,,,996,,,787,,,787,787,787,787', '787,787,787,787,,787,787,787,,787,787,,787,787,787,,,,,,,,,,,,,,,,,', ',,787,,,787,,,787,787,,915,787,915,915,915,915,915,787,,,,,,,,787,915', ',,,787,787,787,787,787,787,,,,787,787,,,,,,,787,915,,787,787,787,788', '788,788,,788,,915,915,788,788,,,,788,,788,788,788,788,788,788,788,,', ',,,788,788,788,788,788,788,788,,,788,,,,915,,,788,,,788,788,788,788', '788,788,788,788,,788,788,788,,788,788,,788,788,788,,,,,,,,,,,,,,,,,', ',,788,,,788,,,788,788,,1042,788,1042,1042,1042,1042,1042,788,,,,,,,', '788,1042,,,,788,788,788,788,788,788,,,,788,788,,,,,,,788,1042,,788,788', '788,790,790,790,,790,,1042,1042,790,790,,,,790,,790,790,790,790,790', '790,790,,,,,,790,790,790,790,790,790,790,,,790,,,,1042,,,790,,,790,790', '790,790,790,790,790,790,,790,790,790,,790,790,,790,790,790,,,,,,,,,', ',,,,,,,,,,790,,,790,,,790,790,,,790,,,,,,790,,,,,,,,790,,,,,790,790', '790,790,790,790,,,,790,790,,,,,,,790,,,790,790,790,265,265,265,,265', ',,,265,265,,,,265,,265,265,265,265,265,265,265,,,,,,265,265,265,265', '265,265,265,,,265,,,,,,,265,,,265,265,265,265,265,265,265,265,265,265', '265,265,,265,265,,265,265,265,,,,,,,,,,,,,,,,,,,,265,,,265,,,265,265', ',,265,,265,,265,,265,,,,,,,,265,,,,,265,265,265,265,265,265,,,,265,265', ',,,,,,265,,265,265,265,265,271,271,271,,271,,,,271,271,,,,271,,271,271', '271,271,271,271,271,,,,,,271,271,271,271,271,271,271,,,271,,,,,,,271', ',,271,271,271,271,271,271,271,271,271,271,271,271,,271,271,,271,271', '271,,,,,,,,,,,,,,,,,,,,271,,,271,,,271,271,,,271,,271,,271,,271,,,,', ',,,271,,,,,271,271,271,271,271,271,,,,271,271,,,,,,,271,,271,271,271', '271,274,274,274,,274,,,,274,274,,,,274,,274,274,274,274,274,274,274', ',,,,,274,274,274,274,274,274,274,,,274,,,,,,,274,,,274,274,274,274,274', '274,274,274,274,274,274,274,,274,274,,274,274,274,,,,,,,,,,,,,,,,,,', ',274,,,274,,,274,274,,,274,,274,,274,,274,,,,,,,,274,,,,,274,274,274', '274,274,274,,,,274,274,274,,,,,,274,,274,274,274,274,32,32,32,,32,,', ',32,32,,,,32,,32,32,32,32,32,32,32,,,,,,32,32,32,32,32,32,32,,,32,,', ',,,,32,,,32,32,32,32,32,32,32,32,32,32,32,32,,32,32,,32,32,32,,,,,,', ',,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,,32,,32,,,,,,,,32,,,,,32,32,32', '32,32,32,,,,32,32,,,,,,,32,,32,32,32,32,33,33,33,,33,,,,33,33,,,,33', ',33,33,33,33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,,33,,,33,33', '33,33,33,33,33,33,33,33,33,33,,33,33,,33,33,33,,,,,,,,,,,,,,,,,,,,33', ',,33,,,33,33,,,33,,33,,33,,33,,,,,,,,33,,,,,33,33,33,33,33,33,,,,33', '33,,,,,,,33,,33,33,33,33,802,802,802,,802,,,,802,802,,,,802,,802,802', '802,802,802,802,802,,,,,,802,802,802,802,802,802,802,,,802,,,,,,,802', ',,802,802,802,802,802,802,802,802,,802,802,802,,802,802,,,,802,,,,,', ',,,,,,,,,,,,,,802,,,802,,,802,802,,,802,,,,,,,,,,,,,,,,,,,802,802,802', '802,802,802,,,,802,802,,,,,,,802,,,802,802,802,281,281,281,,281,,,,281', '281,,,,281,,281,281,281,281,281,281,281,,,,,,281,281,281,281,281,281', '281,,,281,,,,,,,281,,,281,281,281,281,281,281,281,281,,281,281,281,', '281,281,,281,281,281,,,,,,,,,,,,,,,,,,,,281,,,281,,,281,281,,,281,,', ',,,281,,,,,,,,281,,,,,281,281,281,281,281,281,,,,281,281,,,,,,,281,', ',281,281,281,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,', '34,34,34,34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34', '34,,34,34,,34,34,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34', ',34,,,,,,,,34,,,,,34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,283', '283,283,,283,,,,283,283,,,,283,,283,283,283,283,283,283,283,,,,,,283', '283,283,283,283,283,283,,,283,,,,,,,283,,,283,283,283,283,283,283,283', '283,,283,283,283,,283,283,,283,283,283,,,,,,,,,,,,,,,,,,,,283,,,283', ',,283,283,,,283,,,,,,283,,,,,,,,283,,,,,283,283,283,283,283,283,,,,283', '283,,,,,,,283,,,283,283,283,286,286,286,,286,,,,286,286,,,,286,,286', '286,286,286,286,286,286,,,,,,286,286,286,286,286,286,286,,,286,,,,,', ',286,,,286,286,286,286,286,286,286,286,,286,286,286,,286,286,,286,286', '286,,,,,,,,,,,,,,,,,,,,286,,,286,,,286,286,,,286,,,,,,286,,,,,,,,286', ',,,,286,286,286,286,286,286,,,,286,286,,,,,,,286,,,286,286,286,292,292', '292,292,292,,,,292,292,,,,292,,292,292,292,292,292,292,292,,,,,,292', '292,292,292,292,292,292,,,292,,,,,,292,292,,292,292,292,292,292,292', '292,292,292,,292,292,292,,292,292,,292,292,292,,,,,,,,,,,,,,,,,,,,292', ',,292,,,292,292,,,292,,292,,,,292,,,,,,,,292,,,,,292,292,292,292,292', '292,,,,292,292,,,,,,,292,,,292,292,292,37,37,37,,37,,,,37,37,,,,37,', '37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,,37,,,,,,,37,,,37,37', '37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,,,,,,,,,,,,,,37,,,37', ',,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37,37,37,,,,37,37,,,,,,,37', ',,37,37,37,38,38,38,,38,,,,38,38,,,,38,,38,38,38,38,38,38,38,,,,,,38', '38,38,38,38,38,38,,,38,,,,,,,38,,,38,38,38,38,38,38,38,38,,38,38,38', ',38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,,38,,,38,38,,,38,,,,,,,,,,,,,,,', ',,,38,38,38,38,38,38,,,,38,38,,,,38,,,38,,,38,38,38,298,298,298,,298', ',,,298,298,,,,298,,298,298,298,298,298,298,298,,,,,,298,298,298,298', '298,298,298,,,298,,,,,,,298,,,298,298,298,298,298,298,298,298,,298,298', '298,,298,298,,,,298,,,,,,,,,,,,,,,,,,,,298,,,298,,,298,298,,,298,,,', ',,,,,,,,,,,,,,,298,298,298,298,298,298,,,,298,298,,,,298,,,298,,,298', '298,298,848,848,848,,848,,,,848,848,,,,848,,848,848,848,848,848,848', '848,,,,,,848,848,848,848,848,848,848,,,848,,,,,,,848,,,848,848,848,848', '848,848,848,848,,848,848,848,,848,848,,848,848,848,,,,,,,,,,,,,,,,,', ',,848,,,848,,,848,848,,,848,,,,,,848,,,,,,,,848,,,,,848,848,848,848', '848,848,,,,848,848,,,,,,,848,,,848,848,848,861,861,861,,861,,,,861,861', ',,,861,,861,861,861,861,861,861,861,,,,,,861,861,861,861,861,861,861', ',,861,,,,,,,861,,,861,861,861,861,861,861,861,861,,861,861,861,,861', '861,,861,861,861,,,,,,,,,,,,,,,,,,,,861,,,861,,,861,861,,,861,,,,,,861', ',,,,,,,861,,,,,861,861,861,861,861,861,,,,861,861,,,,,,,861,,,861,861', '861,879,879,879,,879,,,,879,879,,,,879,,879,879,879,879,879,879,879', ',,,,,879,879,879,879,879,879,879,,,879,,,,,,,879,,,879,879,879,879,879', '879,879,879,879,879,879,879,,879,879,,879,879,879,,,,,,,,,,,,,,,,,,', ',879,,,879,,,879,879,,,879,,,,879,,879,,,,,,,,879,,,,,879,879,879,879', '879,879,,,,879,879,,,,,,,879,,879,879,879,879,880,880,880,,880,,,,880', '880,,,,880,,880,880,880,880,880,880,880,,,,,,880,880,880,880,880,880', '880,,,880,,,,,,,880,,,880,880,880,880,880,880,880,880,,880,880,880,', '880,880,,880,880,880,,,,,,,,,,,,,,,,,,,,880,,,880,,,880,880,,,880,,', ',,,880,,,,,,,,880,,,,,880,880,880,880,880,880,,,,880,880,,,,,,,880,', ',880,880,880,45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45,45,45,,,,,', '45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45,45,,45,45', '45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45,,,,,,45', ',,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45,895,895', '895,,895,,,,895,895,,,,895,,895,895,895,895,895,895,895,,,,,,895,895', '895,895,895,895,895,,,895,,,,,,,895,,,895,895,895,895,895,895,895,895', ',895,895,895,,895,895,,,,895,,,,,,,,,,,,,,,,,,,,895,,,895,,,895,895', ',,895,,,,,,,,,,,,,,,,,,,895,895,895,895,895,895,,,,895,895,,,,,,,895', ',,895,895,895,46,46,46,,46,,,,46,46,,,,46,,46,46,46,46,46,46,46,,,,', ',46,46,46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46,46', '46,,46,46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46', ',,,,,,,46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,315,315', '315,,315,,,,315,315,,,,315,,315,315,315,315,315,315,315,,,,,,315,315', '315,315,315,315,315,,,315,,,,,,,315,,,315,315,315,315,315,315,315,315', ',315,315,315,,315,315,,,,315,,,,,,,,,,,,,,,,,,,,315,,,315,,,315,315', ',,315,,,,,,,,,,,,,,,,,,,315,315,315,315,315,315,,,,315,315,,,,,,,315', ',,315,315,315,907,907,907,,907,,,,907,907,,,,907,,907,907,907,907,907', '907,907,,,,,,907,907,907,907,907,907,907,,,907,,,,,,,907,,,907,907,907', '907,907,907,907,907,,907,907,907,,907,907,,,,907,,,,,,,,,,,,,,,,,,,', '907,,,907,,,907,907,,,907,,,,,,,,,,,,,,,,,,,907,907,907,907,907,907', ',,,907,907,,,,,,,907,,,907,907,907,47,47,47,,47,,,,47,47,,,,47,,47,47', '47,47,47,47,47,,,,,,47,47,47,47,47,47,47,,,47,,,,,,,47,,,47,47,47,47', '47,47,47,47,,47,47,47,,47,47,,47,47,47,,,,,,,,,,,,,,,,,,,,47,,,47,,', '47,47,,,47,,,,,,47,,,,,,,,47,,,,,47,47,47,47,47,47,,,,47,47,,,,,,,47', ',,47,47,47,932,932,932,,932,,,,932,932,,,,932,,932,932,932,932,932,932', '932,,,,,,932,932,932,932,932,932,932,,,932,,,,,,,932,,,932,932,932,932', '932,932,932,932,,932,932,932,,932,932,,932,932,932,,,,,,,,,,,,,,,,,', ',,932,,,932,,,932,932,,,932,,932,,,,932,,,,,,,,932,,,,,932,932,932,932', '932,932,,,,932,932,,,,,,,932,,,932,932,932,324,324,324,,324,,,,324,324', ',,,324,,324,324,324,324,324,324,324,,,,,,324,324,324,324,324,324,324', ',,324,,,,,,,324,,,324,324,324,324,324,324,324,324,,324,324,324,,324', '324,,324,324,324,,,,,,,,,,,,,,,,,,,,324,,,324,324,,324,324,,,324,,,', ',,324,,,,,,,,324,,,,,324,324,324,324,324,324,,,,324,324,,,,,,,324,,', '324,324,324,327,327,327,,327,,,,327,327,,,,327,,327,327,327,327,327', '327,327,,,,,,327,327,327,327,327,327,327,,,327,,,,,,,327,,,327,327,327', '327,327,327,327,327,,327,327,327,,327,327,,327,327,327,,,,,,,,,,,,,', ',,,,,,327,,,327,,,327,327,,,327,,,,,,327,,,,,,,,327,,,,,327,327,327', '327,327,327,,,,327,327,,,,,,,327,,,327,327,327,333,333,333,,333,,,,333', '333,,,,333,,333,333,333,333,333,333,333,,,,,,333,333,333,333,333,333', '333,,,333,,,,,,,333,,,333,333,333,333,333,333,333,333,333,333,333,333', ',333,333,,333,333,333,,,,,,,,,,,,,,,,,,,,333,,,333,,,333,333,,,333,', ',,,,333,,,,,,,,333,,,,,333,333,333,333,333,333,,,,333,333,,,,,,,333', ',333,333,333,333,340,340,340,,340,,,,340,340,,,,340,,340,340,340,340', '340,340,340,,,,,,340,340,340,340,340,340,340,,,340,,,,,,,340,,,340,340', '340,340,340,340,340,340,,340,340,340,,340,340,,340,340,340,,,,,,,,,', ',,,,,,,,,,340,,,340,,,340,340,,,340,,,,,,340,,,,,,,,340,,,,,340,340', '340,340,340,340,,,,340,340,,,,,,,340,,,340,340,340,341,341,341,,341', ',,,341,341,,,,341,,341,341,341,341,341,341,341,,,,,,341,341,341,341', '341,341,341,,,341,,,,,,,341,,,341,341,341,341,341,341,341,341,,341,341', '341,,341,341,,341,341,341,,,,,,,,,,,,,,,,,,,,341,,,341,,,341,341,,,341', ',,,,,341,,,,,,,,341,,,,,341,341,341,341,341,341,,,,341,341,,,,,,,341', ',,341,341,341,62,62,62,,62,,,,62,62,,,,62,,62,62,62,62,62,62,62,,,,', ',62,62,62,62,62,62,62,,,62,,,,,,,62,,,62,62,62,62,62,62,62,62,62,62', '62,62,,62,62,,62,62,62,,,,,,,,,,,,,,,,,,,,62,,,62,,,62,62,,,62,,62,', ',,62,,,,,,,,62,,,,,62,62,62,62,62,62,,,,62,62,,,,,,,62,,62,62,62,62', '1007,1007,1007,,1007,,,,1007,1007,,,,1007,,1007,1007,1007,1007,1007', '1007,1007,,,,,,1007,1007,1007,1007,1007,1007,1007,,,1007,,,,,,,1007', ',,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,1007,,1007', '1007,,1007,1007,1007,,,,,,,,,,,,,,,,,,,,1007,,,1007,,,1007,1007,,,1007', ',1007,,1007,,1007,,,,,,,,1007,,,,,1007,1007,1007,1007,1007,1007,,,,1007', '1007,,,,,,,1007,,1007,1007,1007,1007,66,66,66,,66,,,,66,66,,,,66,,66', '66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,,66,,,66,66,66', '66,66,66,66,66,,66,66,66,,66,66,,66,66,66,,,,,,,,,,,,,,,,,,,,66,,,66', ',,66,66,,,66,,,,,,66,,,,,,,,66,,,,,66,66,66,66,66,66,,,,66,66,,,,,,', '66,,,66,66,66,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67,67,67,,,,', ',67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67,67', '67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,,67', ',,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67,353,353', '353,,353,,,,353,353,,,,353,,353,353,353,353,353,353,353,,,,,,353,353', '353,353,353,353,353,,,353,,,,,,,353,,,353,353,353,353,353,353,353,353', ',353,353,353,,353,353,,,,353,,,,,,,,,,,,,,,,,,,,353,,,353,,,353,353', ',,353,,,,,,,,,,,,,,,,,,,353,353,353,353,353,353,,,,353,353,,,,,,,353', ',,353,353,353,355,355,355,,355,,,,355,355,,,,355,,355,355,355,355,355', '355,355,,,,,,355,355,355,355,355,355,355,,,355,,,,,,,355,,,355,355,355', '355,355,355,355,355,,355,355,355,,355,355,,,,355,,,,,,,,,,,,,,,,,,,', '355,,,355,,,355,355,,,355,,,,,,,,,,,,,,,,,,,355,355,355,355,355,355', ',,,355,355,,,,,,,355,,,355,355,355,70,70,70,,70,,,,70,70,,,,70,,70,70', '70,70,70,70,70,,,,,,70,70,70,70,70,70,70,,,70,,,,,,,70,,,70,70,70,70', '70,70,70,70,,70,70,70,,70,70,,70,70,70,,,,,,,,,,,,,,,,,,,,70,,,70,,', '70,70,,,70,,,,,,70,,,,,,,,70,,,,,70,70,70,70,70,70,,,,70,70,70,,,,,70', '70,,,70,70,70,71,71,71,,71,,,,71,71,,,,71,,71,71,71,71,71,71,71,,,,', ',71,71,71,71,71,71,71,,,71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,71', '71,,71,71,,,,71,,,,,,,,,,,,,,,,,,,,71,,,71,,,71,71,,,71,,71,,,,,,,,', ',,,,,,,,71,71,71,71,71,71,,,,71,71,,,,,,,71,,,71,71,71,8,8,8,8,8,,,', '8,8,,,,8,,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8', '8,8,8,8,,8,8,8,,8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,', '8,,,,,,,,8,,,,,8,8,8,8,8,8,,,,8,8,,,,,,,8,,,8,8,8,413,413,413,,413,', ',,413,413,,,,413,,413,413,413,413,413,413,413,,,,,,413,413,413,413,413', '413,413,,,413,,,,,,,413,,,413,413,413,413,413,413,413,413,,413,413,413', ',413,413,,413,413,413,,,,,,,,,,,,,,,,,,,,413,,,413,,,413,413,,,413,', ',,,,413,,,,,,,,413,,,,,413,413,413,413,413,413,,,,413,413,,,,,,,413', ',,413,413,413,450,450,450,,450,,,,450,450,,,,450,,450,450,450,450,450', '450,450,,,,,,450,450,450,450,450,450,450,,,450,,,,,,,450,,,450,450,450', '450,450,450,450,450,450,450,450,450,,450,450,,450,450,450,,,,,,,,,,', ',,,,,,,,,450,,,450,,,450,450,,,450,,450,,450,,450,,,,,,,,450,,,,,450', '450,450,450,450,450,,,,450,450,,,,,,,450,,450,450,450,450,452,452,452', ',452,,,,452,452,,,,452,,452,452,452,452,452,452,452,,,,,,452,452,452', '452,452,452,452,,,452,,,,,,,452,,,452,452,452,452,452,452,452,452,,452', '452,452,,452,452,,452,452,452,,,,,,,,,,,,,,,,,,,,452,,,452,,,452,452', ',,452,,,,,,452,,,,,,,,452,,,,,452,452,452,452,452,452,,,,452,452,,,', ',,,452,,,452,452,452,453,453,453,,453,,,,453,453,,,,453,,453,453,453', '453,453,453,453,,,,,,453,453,453,453,453,453,453,,,453,,,,,,,453,,,453', '453,453,453,453,453,453,453,,453,453,453,,453,453,,453,453,453,,,,,', ',,,,,,,,,,,,,,453,,,453,,,453,453,,,453,,,,,,453,,,,,,,,453,,,,,453', '453,453,453,453,453,,,,453,453,,,,,,,453,,,453,453,453,454,454,454,', '454,,,,454,454,,,,454,,454,454,454,454,454,454,454,,,,,,454,454,454', '454,454,454,454,,,454,,,,,,,454,,,454,454,454,454,454,454,454,454,,454', '454,454,,454,454,,454,454,454,,,,,,,,,,,,,,,,,,,,454,,,454,,,454,454', ',,454,,,,,,454,,,,,,,,454,,,,,454,454,454,454,454,454,,,,454,454,,,', ',,,454,,,454,454,454,111,111,111,111,111,,,,111,111,,,,111,,111,111', '111,111,111,111,111,,,,,,111,111,111,111,111,111,111,,,111,,,,,,111', '111,111,111,111,111,111,111,111,111,111,111,,111,111,111,,111,111,,111', '111,111,,,,,,,,,,,,,,,,,,,,111,,,111,,,111,111,,,111,,111,,,,111,,,', ',,,,111,,,,,111,111,111,111,111,111,,,,111,111,,,,,,111,111,,,111,111', '111,116,116,116,,116,,,,116,116,,,,116,,116,116,116,116,116,116,116', ',,,,,116,116,116,116,116,116,116,,,116,,,,,,,116,,,116,116,116,116,116', '116,116,116,,116,116,116,,116,116,,116,116,116,,,,,,,,,,,,,,,,,,,,116', ',,116,,,116,116,,,116,,,,,,116,,,,,,,,116,,,,,116,116,116,116,116,116', ',,,116,116,,,,,,,116,,,116,116,116,117,117,117,,117,,,,117,117,,,,117', ',117,117,117,117,117,117,117,,,,,,117,117,117,117,117,117,117,,,117', ',,,,,,117,,,117,117,117,117,117,117,117,117,,117,117,117,,117,117,,117', '117,117,,,,,,,,,,,,,,,,,,,,117,,,117,,,117,117,,,117,,,,,,117,,,,,,', ',117,,,,,117,117,117,117,117,117,,,,117,117,,,,,,,117,,,117,117,117', '118,118,118,,118,,,,118,118,,,,118,,118,118,118,118,118,118,118,,,,', ',118,118,118,118,118,118,118,,,118,,,,,,,118,,,118,118,118,118,118,118', '118,118,,118,118,118,,118,118,,118,118,118,,,,,,,,,,,,,,,,,,,,118,,', '118,,,118,118,,,118,,,,,,118,,,,,,,,118,,,,,118,118,118,118,118,118', ',,,118,118,,,,,,,118,,,118,118,118,119,119,119,,119,,,,119,119,,,,119', ',119,119,119,119,119,119,119,,,,,,119,119,119,119,119,119,119,,,119', ',,,,,,119,,,119,119,119,119,119,119,119,119,,119,119,119,,119,119,,119', '119,119,,,,,,,,,,,,,,,,,,,,119,,,119,,,119,119,,,119,,,,,,119,,,,,,', ',119,,,,,119,119,119,119,119,119,,,,119,119,,,,,,,119,,,119,119,119', '120,120,120,120,120,,,,120,120,,,,120,,120,120,120,120,120,120,120,', ',,,,120,120,120,120,120,120,120,,,120,,,,,,120,120,,120,120,120,120', '120,120,120,120,120,,120,120,120,,120,120,,120,120,120,,,,,,,,,,,,,', ',,,,,,120,,,120,,,120,120,,,120,,120,,,,120,,,,,,,,120,,,,,120,120,120', '120,120,120,,,,120,120,,,,,,,120,,,120,120,120,495,495,495,,495,,,,495', '495,,,,495,,495,495,495,495,495,495,495,,,,,,495,495,495,495,495,495', '495,,,495,,,,,,,495,,,495,495,495,495,495,495,495,495,495,495,495,495', ',495,495,,495,495,495,,,,,,,,,,,,,,,,,,,,495,,,495,,,495,495,,,495,', '495,,495,,495,,,,,,,,495,,,,,495,495,495,495,495,495,,,,495,495,,,,', ',,495,,495,495,495,495,498,498,498,,498,,,,498,498,,,,498,,498,498,498', '498,498,498,498,,,,,,498,498,498,498,498,498,498,,,498,,,,,,,498,,,498', '498,498,498,498,498,498,498,498,498,498,498,,498,498,,498,498,498,,', ',,,,,,,,,,,,,,,,,498,,,498,,,498,498,,,498,,,,498,,498,,,,,,,,498,,', ',,498,498,498,498,498,498,,,,498,498,,,,,,,498,,498,498,498,498,500', '500,500,,500,,,,500,500,,,,500,,500,500,500,500,500,500,500,,,,,,500', '500,500,500,500,500,500,,,500,,,,,,,500,,,500,500,500,500,500,500,500', '500,,500,500,500,,500,500,,500,500,500,,,,,,,,,,,,,,,,,,,,500,,,500', ',,500,500,,,500,,,,,,500,,,,,,,,500,,,,,500,500,500,500,500,500,,,,500', '500,,,,,,,500,,,500,500,500,502,502,502,,502,,,,502,502,,,,502,,502', '502,502,502,502,502,502,,,,,,502,502,502,502,502,502,502,,,502,,,,,', ',502,,,502,502,502,502,502,502,502,502,,502,502,502,,502,502,,502,502', '502,,,,,,,,,,,,,,,,,,,,502,,,502,,,502,502,,,502,,,,,,502,,,,,,,,502', ',,,,502,502,502,502,502,502,,,,502,502,,,,,,,502,,,502,502,502,505,505', '505,505,505,,,,505,505,,,,505,,505,505,505,505,505,505,505,,,,,,505', '505,505,505,505,505,505,,,505,,,,,,505,505,,505,505,505,505,505,505', '505,505,505,,505,505,505,,505,505,,505,505,505,,,,,,,,,,,,,,,,,,,,505', ',,505,,,505,505,,,505,,505,,,,505,,,,,,,,505,,,,,505,505,505,505,505', '505,,,,505,505,,,,,,505,505,,,505,505,505,23,23,23,,23,,,,23,23,,,,23', ',23,23,23,23,23,23,23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,,23,23', '23,23,23,23,23,23,,23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,', ',23,,,23,23,,,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23,23,,', ',,,,23,,,23,23,23,512,512,512,,512,,,,512,512,,,,512,,512,512,512,512', '512,512,512,,,,,,512,512,512,512,512,512,512,,,512,,,,,,,512,,,512,512', '512,512,512,512,512,512,,512,512,512,,512,512,,,,512,,,,,,,,,,,,,,,', ',,,,512,,,512,,,512,512,,,512,,,,,,,,,,,,,,,,,,,512,512,512,512,512', '512,,,,512,512,,,,,,,512,,,512,512,512,514,514,514,,514,,,,514,514,', ',,514,,514,514,514,514,514,514,514,,,,,,514,514,514,514,514,514,514', ',,514,,,,,,,514,,,514,514,514,514,514,514,514,514,514,514,514,514,,514', '514,,514,514,514,,,,,,,,,,,,,,,,,,,,514,,,514,,,514,514,,,514,,514,', '514,,514,,,,,,,,514,,,,,514,514,514,514,514,514,,,,514,514,,,,,,,514', ',514,514,514,514,208,208,208,,208,,,,208,208,,,,208,,208,208,208,208', '208,208,208,,,,,,208,208,208,208,208,208,208,,,208,,,,,,,208,,,208,208', '208,208,208,208,208,208,,208,208,208,,208,208,,208,208,208,,,,,,,,,', ',,,,,,,,,,208,,,208,,,208,208,,,208,,208,,,,208,,,,,,,,208,,,,,208,208', '208,208,208,208,,,,208,208,,,,,,,208,,,208,208,208,521,521,521,,521', ',,,521,521,,,,521,,521,521,521,521,521,521,521,,,,,,521,521,521,521', '521,521,521,,,521,,,,,,,521,,,521,521,521,521,521,521,521,521,,521,521', '521,,521,521,,,,521,,,,,,,,,,,,,,,,,,,,521,,,521,,,521,521,,,521,,,', ',,,,,,,,,,,,,,,521,521,521,521,521,521,,,,521,521,,,,,,,521,,,521,521', '521,209,209,209,,209,,,,209,209,,,,209,,209,209,209,209,209,209,209', ',,,,,209,209,209,209,209,209,209,,,209,,,,,,,209,,,209,209,209,209,209', '209,209,209,,209,209,209,,209,209,,209,209,209,,,,,,,,,,,,,,,,,,,,209', ',,209,,,209,209,,,209,,,,,,209,,,,,,,,209,,,,,209,209,209,209,209,209', ',,,209,209,,,,,,,209,,,209,209,209,524,524,524,,524,,,,524,524,,,,524', ',524,524,524,524,524,524,524,,,,,,524,524,524,524,524,524,524,,,524', ',,,,,,524,,,524,524,524,524,524,524,524,524,,524,524,524,,524,524,,524', '524,524,,,,,,,,,,,,,,,,,,,,524,,,524,,,524,524,,,524,,,,,,524,,,,,,', ',524,,,,,524,524,524,524,524,524,,,,524,524,,,,,,,524,,,524,524,524', '525,525,525,,525,,,,525,525,,,,525,,525,525,525,525,525,525,525,,,,', ',525,525,525,525,525,525,525,,,525,,,,,,,525,,,525,525,525,525,525,525', '525,525,,525,525,525,,525,525,,525,525,525,,,,,,,,,,,,,,,,,,,,525,,', '525,,,525,525,,,525,,,,,,525,,,,,,,,525,,,,,525,525,525,525,525,525', ',,,525,525,,,,,,,525,,,525,525,525,526,526,526,,526,,,,526,526,,,,526', ',526,526,526,526,526,526,526,,,,,,526,526,526,526,526,526,526,,,526', ',,,,,,526,,,526,526,526,526,526,526,526,526,,526,526,526,,526,526,,526', '526,526,,,,,,,,,,,,,,,,,,,,526,,,526,,,526,526,,,526,,,,,,526,,,,,,', ',526,,,,,526,526,526,526,526,526,,,,526,526,,,,,,,526,,,526,526,526', '530,530,530,,530,,,,530,530,,,,530,,530,530,530,530,530,530,530,,,,', ',530,530,530,530,530,530,530,,,530,,,,,,,530,,,530,530,530,530,530,530', '530,530,,530,530,530,,530,530,,530,530,530,,,,,,,,,,,,,,,,,,,,530,,', '530,,,530,530,,,530,,,,,,530,,,,,,,,530,,,,,530,530,530,530,530,530', ',,,530,530,,,,,,,530,,,530,530,530,210,210,210,,210,,,,210,210,,,,210', ',210,210,210,210,210,210,210,,,,,,210,210,210,210,210,210,210,,,210', ',,,,,,210,,,210,210,210,210,210,210,210,210,210,210,210,210,,210,210', ',210,210,210,,,,,,,,,,,,,,,,,,,,210,,,210,,,210,210,,,210,,210,,210', ',210,,,,,,,,210,,,,,210,210,210,210,210,210,,,,210,210,,,,,,,210,,210', '210,210,210,536,536,536,,536,,,,536,536,,,,536,,536,536,536,536,536', '536,536,,,,,,536,536,536,536,536,536,536,,,536,,,,,,,536,,,536,536,536', '536,536,536,536,536,536,536,536,536,,536,536,,536,536,536,,,,,,,,,,', ',,,,,,,,,536,,,536,,,536,536,,,536,,536,,,,536,,,,,,,,536,,,,,536,536', '536,536,536,536,,,,536,536,,,,,,,536,,536,536,536,536,539,539,539,,539', ',,,539,539,,,,539,,539,539,539,539,539,539,539,,,,,,539,539,539,539', '539,539,539,,,539,,,,,,,539,,,539,539,539,539,539,539,539,539,539,539', '539,539,,539,539,,539,539,539,,,,,,,,,,,,,,,,,,,,539,,,539,,,539,539', ',,539,,,,,,539,,,,,,,,539,,,,,539,539,539,539,539,539,,,,539,539,,,', ',,,539,,539,539,539,539,214,214,214,,214,,,,214,214,,,,214,,214,214', '214,214,214,214,214,,,,,,214,214,214,214,214,214,214,,,214,,,,,,,214', ',,214,214,214,214,214,214,214,214,,214,214,214,,214,214,,214,214,214', ',,,,,,,,,,,,,,,,,,,214,,,214,,,214,214,,,214,,,,,,214,,,,,,,,214,,,', ',214,214,214,214,214,214,,,,214,214,,,,,,,214,,,214,214,214,215,215', '215,,215,,,,215,215,,,,215,,215,215,215,215,215,215,215,,,,,,215,215', '215,215,215,215,215,,,215,,,,,,,215,,,215,215,215,215,215,215,215,215', ',215,215,215,,215,215,,215,215,215,,,,,,,,,,,,,,,,,,,,215,,,215,,,215', '215,,,215,,215,,,,215,,,,,,,,215,,,,,215,215,215,215,215,215,,,,215', '215,,,,,,,215,,,215,215,215,216,216,216,,216,,,,216,216,,,,216,,216', '216,216,216,216,216,216,,,,,,216,216,216,216,216,216,216,,,216,,,,,', ',216,,,216,216,216,216,216,216,216,216,,216,216,216,,216,216,,216,216', '216,,,,,,,,,,,,,,,,,,,,216,,,216,,,216,216,,,216,,,,,,216,,,,,,,,216', ',,,,216,216,216,216,216,216,,,,216,216,,,,,,,216,,,216,216,216,217,217', '217,,217,,,,217,217,,,,217,,217,217,217,217,217,217,217,,,,,,217,217', '217,217,217,217,217,,,217,,,,,,,217,,,217,217,217,217,217,217,217,217', ',217,217,217,,217,217,,217,217,217,,,,,,,,,,,,,,,,,,,,217,,,217,,,217', '217,,,217,,,,,,217,,,,,,,,217,,,,,217,217,217,217,217,217,,,,217,217', ',,,,,,217,,,217,217,217,218,218,218,,218,,,,218,218,,,,218,,218,218', '218,218,218,218,218,,,,,,218,218,218,218,218,218,218,,,218,,,,,,,218', ',,218,218,218,218,218,218,218,218,,218,218,218,,218,218,,218,218,218', ',,,,,,,,,,,,,,,,,,,218,,,218,,,218,218,,,218,,,,,,218,,,,,,,,218,,,', ',218,218,218,218,218,218,,,,218,218,,,,,,,218,,,218,218,218,219,219', '219,,219,,,,219,219,,,,219,,219,219,219,219,219,219,219,,,,,,219,219', '219,219,219,219,219,,,219,,,,,,,219,,,219,219,219,219,219,219,219,219', ',219,219,219,,219,219,,219,219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219', '219,,,219,,,,,,219,,,,,,,,219,,,,,219,219,219,219,219,219,,,,219,219', '219,,,,,,219,,,219,219,219,564,564,564,,564,,,,564,564,,,,564,,564,564', '564,564,564,564,564,,,,,,564,564,564,564,564,564,564,,,564,,,,,,,564', ',,564,564,564,564,564,564,564,564,,564,564,564,,564,564,,564,564,564', ',,,,,,,,,,,,,,,,,,,564,,,564,,,564,564,,,564,,,,,,564,,,,,,,,564,,,', ',564,564,564,564,564,564,,,,564,564,,,,,,,564,,,564,564,564,585,585', '585,,585,,,,585,585,,,,585,,585,585,585,585,585,585,585,,,,,,585,585', '585,585,585,585,585,,,585,,,,,,,585,,,585,585,585,585,585,585,585,585', '585,585,585,585,,585,585,,585,585,585,,,,,,,,,,,,,,,,,,,,585,,,585,', ',585,585,,,585,,585,,585,,585,,,,,,,,585,,,,,585,585,585,585,585,585', ',,,585,585,,,,,,,585,,585,585,585,585,597,597,597,,597,,,,597,597,,', ',597,,597,597,597,597,597,597,597,,,,,,597,597,597,597,597,597,597,', ',597,,,,,,,597,,,597,597,597,597,597,597,597,597,,597,597,597,,597,597', ',597,597,597,,,,,,,,,,,,,,,,,,,,597,,,597,,,597,597,,,597,,,,,,597,', ',,,,,,597,,,,,597,597,597,597,597,597,,,,597,597,,,,,,,597,,,597,597', '597,601,601,601,,601,,,,601,601,,,,601,,601,601,601,601,601,601,601', ',,,,,601,601,601,601,601,601,601,,,601,,,,,,,601,,,601,601,601,601,601', '601,601,601,,601,601,601,,601,601,,601,601,601,,,,,,,,,,,,,,,,,,,,601', ',,601,,,601,601,,,601,,,,,,601,,,,,,,,601,,,,,601,601,601,601,601,601', ',,,601,601,,,,,,,601,,,601,601,601,230,230,230,,230,,,,230,230,,,,230', ',230,230,230,230,230,230,230,,,,,,230,230,230,230,230,230,230,,,230', ',,,,,,230,,,230,230,230,230,230,230,230,230,,230,230,230,,230,230,,230', '230,230,,,,,,,,,,,,,,,,,,,,230,,,230,,,230,230,,,230,,,,,,230,,,,,,', ',230,,,,,230,230,230,230,230,230,,,,230,230,,,,,,,230,,,230,230,230', '233,233,233,,233,,,,233,233,,,,233,,233,233,233,233,233,233,233,,,,', ',233,233,233,233,233,233,233,,,233,,,,,,,233,,,233,233,233,233,233,233', '233,233,,233,233,233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,', '233,,,233,233,,,233,,,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233', ',,,233,233,,,,,,,233,,,233,233,233,630,630,630,,630,,,,630,630,,,,630', ',630,630,630,630,630,630,630,,,,,,630,630,630,630,630,630,630,,,630', ',,,,,,630,,,630,630,630,630,630,630,630,630,,630,630,630,,630,630,,630', '630,630,,,,,,,,,,,,,,,,,,,,630,,,630,,,630,630,,,630,,630,,,,630,,,', ',,,,630,,,,,630,630,630,630,630,630,,,,630,630,,,,,,,630,,,630,630,630', '631,631,631,,631,,,,631,631,,,,631,,631,631,631,631,631,631,631,,,,', ',631,631,631,631,631,631,631,,,631,,,,,,,631,,,631,631,631,631,631,631', '631,631,,631,631,631,,631,631,,631,631,631,,,,,,,,,,,,,,,,,,,,631,,', '631,,,631,631,,,631,,,,,,631,,,,,,,,631,,,,,631,631,631,631,631,631', ',,,631,631,,,,,,,631,,,631,631,631,234,234,234,,234,,,,234,234,,,,234', ',234,234,234,234,234,234,234,,,,,,234,234,234,234,234,234,234,,,234', ',,,,,,234,,,234,234,234,234,234,234,234,234,,234,234,234,,234,234,,234', '234,234,,,,,,,,,,,,,,,,,,,,234,,,234,,,234,234,,,234,,,,,,234,,,,,,', ',234,,,,,234,234,234,234,234,234,,,,234,234,,,,,,,234,,,234,234,234', '634,634,634,,634,,,,634,634,,,,634,,634,634,634,634,634,634,634,,,,', ',634,634,634,634,634,634,634,,,634,,,,,,,634,,,634,634,634,634,634,634', '634,634,634,634,634,634,,634,634,,634,634,634,,,,,,,,,,,,,,,,,,,,634', ',,634,,,634,634,,,634,,634,,634,,634,,,,,,,,634,,,,,634,634,634,634', '634,634,,,,634,634,,,,,,,634,,634,634,634,634,635,635,635,,635,,,,635', '635,,,,635,,635,635,635,635,635,635,635,,,,,,635,635,635,635,635,635', '635,,,635,,,,,,,635,,,635,635,635,635,635,635,635,635,635,635,635,635', ',635,635,,635,635,635,,,,,,,,,,,,,,,,,,,,635,,,635,,,635,635,,,635,', ',,635,,635,,,,,,,,635,,,,,635,635,635,635,635,635,,,,635,635,,,,,,,635', ',635,635,635,635,636,636,636,,636,,,,636,636,,,,636,,636,636,636,636', '636,636,636,,,,,,636,636,636,636,636,636,636,,,636,,,,,,,636,,,636,636', '636,636,636,636,636,636,,636,636,636,,636,636,,636,636,636,,,,,,,,,', ',,,,,,,,,,636,,,636,,,636,636,,,636,,,,,,636,,,,,,,,636,,,,,636,636', '636,636,636,636,,,,636,636,,,,,,,636,,,636,636,636,637,637,637,,637', ',,,637,637,,,,637,,637,637,637,637,637,637,637,,,,,,637,637,637,637', '637,637,637,,,637,,,,,,,637,,,637,637,637,637,637,637,637,637,,637,637', '637,,637,637,,637,637,637,,,,,,,,,,,,,,,,,,,,637,,,637,,,637,637,,,637', ',,,,,637,,,,,,,,637,,,,,637,637,637,637,637,637,,,,637,637,,,,,,,637', ',,637,637,637,235,235,235,,235,,,,235,235,,,,235,,235,235,235,235,235', '235,235,,,,,,235,235,235,235,235,235,235,,,235,,,,,,,235,,,235,235,235', '235,235,235,235,235,,235,235,235,,235,235,,235,235,235,,,,,,,,,,,,,', ',,,,,,235,,,235,,,235,235,,,235,,,,,,235,,,,,,,,235,,,,,235,235,235', '235,235,235,,,,235,235,,,,,,,235,,,235,235,235,642,642,642,,642,,,,642', '642,,,,642,,642,642,642,642,642,642,642,,,,,,642,642,642,642,642,642', '642,,,642,,,,,,,642,,,642,642,642,642,642,642,642,642,,642,642,642,', '642,642,,642,642,642,,,,,,,,,,,,,,,,,,,,642,,,642,,,642,642,,,642,,', ',,,642,,,,,,,,642,,,,,642,642,642,642,642,642,,,,642,642,,,,,,,642,', ',642,642,642,643,643,643,,643,,,,643,643,,,,643,,643,643,643,643,643', '643,643,,,,,,643,643,643,643,643,643,643,,,643,,,,,,,643,,,643,643,643', '643,643,643,643,643,,643,643,643,,643,643,,643,643,643,,,,,,,,,,,,,', ',,,,,,643,,,643,,,643,643,,,643,,,,,,643,,,,,,,,643,,,,,643,643,643', '643,643,643,,,,643,643,,,,,,,643,,,643,643,643,236,236,236,,236,,,,236', '236,,,,236,,236,236,236,236,236,236,236,,,,,,236,236,236,236,236,236', '236,,,236,,,,,,,236,,,236,236,236,236,236,236,236,236,,236,236,236,', '236,236,,236,236,236,,,,,,,,,,,,,,,,,,,,236,,,236,,,236,236,,,236,,', ',,,236,,,,,,,,236,,,,,236,236,236,236,236,236,,,,236,236,,,,,,,236,', ',236,236,236,646,646,646,,646,,,,646,646,,,,646,,646,646,646,646,646', '646,646,,,,,,646,646,646,646,646,646,646,,,646,,,,,,,646,,,646,646,646', '646,646,646,646,646,,646,646,646,,646,646,,646,646,646,,,,,,,,,,,,,', ',,,,,,646,,,646,,,646,646,,,646,,,,,,646,,,,,,,,646,,,,,646,646,646', '646,646,646,,,,646,646,,,,,,,646,,,646,646,646,647,647,647,,647,,,,647', '647,,,,647,,647,647,647,647,647,647,647,,,,,,647,647,647,647,647,647', '647,,,647,,,,,,,647,,,647,647,647,647,647,647,647,647,,647,647,647,', '647,647,,647,647,647,,,,,,,,,,,,,,,,,,,,647,,,647,,,647,647,,,647,,', ',,,647,,,,,,,,647,,,,,647,647,647,647,647,647,,,,647,647,,,,,,,647,', ',647,647,647,237,237,237,,237,,,,237,237,,,,237,,237,237,237,237,237', '237,237,,,,,,237,237,237,237,237,237,237,,,237,,,,,,,237,,,237,237,237', '237,237,237,237,237,,237,237,237,,237,237,,237,237,237,,,,,,,,,,,,,', ',,,,,,237,,,237,,,237,237,,,237,,,,,,237,,,,,,,,237,,,,,237,237,237', '237,237,237,,,,237,237,,,,,,,237,,,237,237,237,238,238,238,,238,,,,238', '238,,,,238,,238,238,238,238,238,238,238,,,,,,238,238,238,238,238,238', '238,,,238,,,,,,,238,,,238,238,238,238,238,238,238,238,,238,238,238,', '238,238,,238,238,238,,,,,,,,,,,,,,,,,,,,238,,,238,,,238,238,,,238,,', ',,,238,,,,,,,,238,,,,,238,238,238,238,238,238,,,,238,238,,,,,,,238,', ',238,238,238,239,239,239,,239,,,,239,239,,,,239,,239,239,239,239,239', '239,239,,,,,,239,239,239,239,239,239,239,,,239,,,,,,,239,,,239,239,239', '239,239,239,239,239,,239,239,239,,239,239,,239,239,239,,,,,,,,,,,,,', ',,,,,,239,,,239,,,239,239,,,239,,,,,,239,,,,,,,,239,,,,,239,239,239', '239,239,239,,,,239,239,,,,,,,239,,,239,239,239,240,240,240,,240,,,,240', '240,,,,240,,240,240,240,240,240,240,240,,,,,,240,240,240,240,240,240', '240,,,240,,,,,,,240,,,240,240,240,240,240,240,240,240,,240,240,240,', '240,240,,240,240,240,,,,,,,,,,,,,,,,,,,,240,,,240,,,240,240,,,240,,', ',,,240,,,,,,,,240,,,,,240,240,240,240,240,240,,,,240,240,,,,,,,240,', ',240,240,240,241,241,241,,241,,,,241,241,,,,241,,241,241,241,241,241', '241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241,241,241', '241,241,241,241,241,,241,241,241,,241,241,,241,241,241,,,,,,,,,,,,,', ',,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,241,,,,,241,241,241', '241,241,241,,,,241,241,,,,,,,241,,,241,241,241,671,671,671,,671,,,,671', '671,,,,671,,671,671,671,671,671,671,671,,,,,,671,671,671,671,671,671', '671,,,671,,,,,,,671,,,671,671,671,671,671,671,671,671,,671,671,671,', '671,671,,671,671,671,,,,,,,,,,,,,,,,,,,,671,,,671,,,671,671,,,671,,', ',,,671,,,,,,,,671,,,,,671,671,671,671,671,671,,,,671,671,,,,,,,671,', ',671,671,671,677,677,677,,677,,,,677,677,,,,677,,677,677,677,677,677', '677,677,,,,,,677,677,677,677,677,677,677,,,677,,,,,,,677,,,677,677,677', '677,677,677,677,677,,677,677,677,,677,677,,,,677,,,,,,,,,,,,,,,,,,,', '677,,,677,,,677,677,,,677,,,,,,,,,,,,,,,,,,,677,677,677,677,677,677', ',,,677,677,,,,,,,677,,,677,677,677,242,242,242,,242,,,,242,242,,,,242', ',242,242,242,242,242,242,242,,,,,,242,242,242,242,242,242,242,,,242', ',,,,,,242,,,242,242,242,242,242,242,242,242,,242,242,242,,242,242,,242', '242,242,,,,,,,,,,,,,,,,,,,,242,,,242,,,242,242,,,242,,,,,,242,,,,,,', ',242,,,,,242,242,242,242,242,242,,,,242,242,,,,,,,242,,,242,242,242', '243,243,243,,243,,,,243,243,,,,243,,243,243,243,243,243,243,243,,,,', ',243,243,243,243,243,243,243,,,243,,,,,,,243,,,243,243,243,243,243,243', '243,243,,243,243,243,,243,243,,243,243,243,,,,,,,,,,,,,,,,,,,,243,,', '243,,,243,243,,,243,,,,,,243,,,,,,,,243,,,,,243,243,243,243,243,243', ',,,243,243,,,,,,,243,,,243,243,243,244,244,244,,244,,,,244,244,,,,244', ',244,244,244,244,244,244,244,,,,,,244,244,244,244,244,244,244,,,244', ',,,,,,244,,,244,244,244,244,244,244,244,244,,244,244,244,,244,244,,244', '244,244,,,,,,,,,,,,,,,,,,,,244,,,244,,,244,244,,,244,,,,,,244,,,,,,', ',244,,,,,244,244,244,244,244,244,,,,244,244,,,,,,,244,,,244,244,244', '245,245,245,,245,,,,245,245,,,,245,,245,245,245,245,245,245,245,,,,', ',245,245,245,245,245,245,245,,,245,,,,,,,245,,,245,245,245,245,245,245', '245,245,,245,245,245,,245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245,,', '245,,,245,245,,,245,,,,,,245,,,,,,,,245,,,,,245,245,245,245,245,245', ',,,245,245,,,,,,,245,,,245,245,245,246,246,246,,246,,,,246,246,,,,246', ',246,246,246,246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246', ',,,,,,246,,,246,246,246,246,246,246,246,246,,246,246,246,,246,246,,246', '246,246,,,,,,,,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,', ',246,,,,,246,246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246', '688,688,688,,688,,,,688,688,,,,688,,688,688,688,688,688,688,688,,,,', ',688,688,688,688,688,688,688,,,688,,,,,,,688,,,688,688,688,688,688,688', '688,688,,688,688,688,,688,688,,,,688,,,,,,,,,,,,,,,,,,,,688,,,688,,', '688,688,,,688,,,,,,,,,,,,,,,,,,,688,688,688,688,688,688,,,,688,688,', ',,,,,688,,,688,688,688,247,247,247,,247,,,,247,247,,,,247,,247,247,247', '247,247,247,247,,,,,,247,247,247,247,247,247,247,,,247,,,,,,,247,,,247', '247,247,247,247,247,247,247,,247,247,247,,247,247,,247,247,247,,,,,', ',,,,,,,,,,,,,,247,,,247,,,247,247,,,247,,,,,,247,,,,,,,,247,,,,,247', '247,247,247,247,247,,,,247,247,,,,,,,247,,,247,247,247,248,248,248,', '248,,,,248,248,,,,248,,248,248,248,248,248,248,248,,,,,,248,248,248', '248,248,248,248,,,248,,,,,,,248,,,248,248,248,248,248,248,248,248,,248', '248,248,,248,248,,248,248,248,,,,,,,,,,,,,,,,,,,,248,,,248,,,248,248', ',,248,,,,,,248,,,,,,,,248,,,,,248,248,248,248,248,248,,,,248,248,,,', ',,,248,,,248,248,248,249,249,249,,249,,,,249,249,,,,249,,249,249,249', '249,249,249,249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249', '249,249,249,249,249,249,249,,249,249,249,,249,249,,249,249,249,,,,,', ',,,,,,,,,,,,,,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249', '249,249,249,249,249,,,,249,249,,,,,,,249,,,249,249,249,694,694,694,', '694,,,,694,694,,,,694,,694,694,694,694,694,694,694,,,,,,694,694,694', '694,694,694,694,,,694,,,,,,,694,,,694,694,694,694,694,694,694,694,,694', '694,694,,694,694,,694,694,694,,,,,,,,,,,,,,,,,,,,694,,,694,,,694,694', ',,694,,694,,,,694,,,,,,,,694,,,,,694,694,694,694,694,694,,,,694,694', ',,,,,,694,,,694,694,694,250,250,250,,250,,,,250,250,,,,250,,250,250', '250,250,250,250,250,,,,,,250,250,250,250,250,250,250,,,250,,,,,,,250', ',,250,250,250,250,250,250,250,250,,250,250,250,,250,250,,250,250,250', ',,,,,,,,,,,,,,,,,,,250,,,250,,,250,250,,,250,,,,,,250,,,,,,,,250,,,', ',250,250,250,250,250,250,,,,250,250,,,,,,,250,,,250,250,250,251,251', '251,,251,,,,251,251,,,,251,,251,251,251,251,251,251,251,,,,,,251,251', '251,251,251,251,251,,,251,,,,,,,251,,,251,251,251,251,251,251,251,251', ',251,251,251,,251,251,,251,251,251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251', '251,,,251,,,,,,251,,,,,,,,251,,,,,251,251,251,251,251,251,,,,251,251', ',,,,,,251,,,251,251,251,714,714,714,,714,,,,714,714,,,,714,,714,714', '714,714,714,714,714,,,,,,714,714,714,714,714,714,714,,,714,,,,,,,714', ',,714,714,714,714,714,714,714,714,,714,714,714,,714,714,,714,714,714', ',,,,,,,,,,,,,,,,,,,714,,,714,,,714,714,,,714,,,,,,714,,,,,,,,714,,,', ',714,714,714,714,714,714,,,,714,714,,,,,,,714,,,714,714,714,252,252', '252,,252,,,,252,252,,,,252,,252,252,252,252,252,252,252,,,,,,252,252', '252,252,252,252,252,,,252,,,,,,,252,,,252,252,252,252,252,252,252,252', ',252,252,252,,252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252', '252,,,252,,,,,,252,,,,,,,,252,,,,,252,252,252,252,252,252,,,,252,252', ',,,,,,252,,,252,252,252,253,253,253,,253,,,,253,253,,,,253,,253,253', '253,253,253,253,253,,,,,,253,253,253,253,253,253,253,,,253,,,,,,,253', ',,253,253,253,253,253,253,253,253,,253,253,253,,253,253,,253,253,253', ',,,,,,,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,,,,,253,,,,,,,,253,,,', ',253,253,253,253,253,253,,,,253,253,,,,,,,253,,,253,253,253,254,254', '254,,254,,,,254,254,,,,254,,254,254,254,254,254,254,254,,,,,,254,254', '254,254,254,254,254,,,254,,,,,,,254,,,254,254,254,254,254,254,254,254', ',254,254,254,,254,254,,254,254,254,,,,,,,,,,,,,,,,,,,,254,,,254,,,254', '254,,,254,,,,,,254,,,,,,,,254,,,,,254,254,254,254,254,254,,,,254,254', ',,,,,,254,,,254,254,254,255,255,255,,255,,,,255,255,,,,255,,255,255', '255,255,255,255,255,,,,,,255,255,255,255,255,255,255,,,255,,,,,,,255', ',,255,255,255,255,255,255,255,255,,255,255,255,,255,255,,255,255,255', ',,,,,,,,,,,,,,,,,,,255,,,255,,,255,255,,,255,,,,,,255,,,,,,,,255,,,', ',255,255,255,255,255,255,,,,255,255,,,,,,,255,,,255,255,255,735,735', '735,,735,,,,735,735,,,,735,,735,735,735,735,735,735,735,,,,,,735,735', '735,735,735,735,735,,,735,,,,,,,735,,,735,735,735,735,735,735,735,735', ',735,735,735,,735,735,,735,735,735,,,,,,,,,,,,,,,,,,,,735,,,735,,,735', '735,,,735,,735,,,,735,,,,,,,,735,,,,59,735,735,735,735,735,735,59,59', '59,735,735,59,59,59,,59,,735,,,735,735,735,,,59,59,59,,,,,,,,59,59,', '59,59,59,59,59,,,,,,,,,,,,,,,,,,,,,,,,59,59,59,59,59,59,59,59,59,59', '59,59,59,59,,,59,59,59,,,59,,,59,,,59,59,,59,,59,,59,,59,59,59,59,59', '59,59,,59,,59,,,,,,,,,,,,,59,59,59,59,434,59,,59,,,,434,434,434,,,434', '434,434,942,434,942,942,942,942,942,,,,434,434,434,434,,,942,,,,,434', '434,,434,434,434,434,434,,,,,,,,,,942,942,,,,,,,,942,942,942,942,,434', '434,434,434,434,434,434,434,434,434,434,434,434,434,,,434,434,434,,', '434,,,434,,,434,434,,434,942,434,,434,,434,434,434,434,434,434,434,', '434,434,434,,,,,,,,,,,,,434,434,434,434,433,434,,434,,,,433,433,433', ',,433,433,433,992,433,992,992,992,992,992,,,,433,433,433,433,,,992,', ',,,433,433,,433,433,433,433,433,,,,,,,,,,992,,,,,,,,,992,992,992,992', ',433,433,433,433,433,433,433,433,433,433,433,433,433,433,,,433,433,433', ',,433,,,433,,,433,433,,433,992,433,,433,,433,433,433,433,433,433,433', ',433,433,433,,,,,,,,,,,,,433,433,433,433,31,433,,433,,,,31,31,31,,,31', '31,31,708,31,708,708,708,708,708,,,,,31,31,,,,708,,,,,31,31,,31,31,31', '31,31,,,,,,,,,,708,,,,,,,,,708,708,708,708,,31,31,31,31,31,31,31,31', '31,31,31,31,31,31,,,31,31,31,,,31,,31,31,,,31,31,,31,708,31,,31,,31', '31,31,31,31,31,31,,31,,31,,,,,,,,,,,,424,31,31,,31,,31,424,424,424,', ',424,424,424,888,424,888,888,888,888,888,,,,424,424,424,,,,888,,,,,424', '424,,424,424,424,424,424,,,,,,,,,,888,,,,,,,,,888,888,888,888,,424,424', '424,424,424,424,424,424,424,424,424,424,424,424,,,424,424,424,,,424', ',424,424,,,424,424,,424,888,424,,424,,424,424,424,424,424,424,424,,424', '424,424,,,,,,,,,,,,30,424,424,,424,,424,30,30,30,,,30,30,30,885,30,885', '885,885,885,885,,,,30,30,30,,,,885,,,,,30,30,,30,30,30,30,30,,,,,,,', ',,885,,,,,,,,,885,885,885,885,,30,30,30,30,30,30,30,30,30,30,30,30,30', '30,,,30,30,30,,,30,,30,30,,,30,30,,30,885,30,,30,,30,30,30,30,30,30', '30,,30,30,30,,,,,,,,,,,,482,30,30,,30,,30,482,482,482,,,482,482,482', '755,482,755,755,755,755,755,,,,482,482,,,,,755,,,,,482,482,,482,482', '482,482,482,,,,,,,,,,755,,,,,,,,,755,755,755,755,,,,,,,,,,,,,482,,,', ',,,482,,,,,482,482,,,,,,,755,,,,1009,1009,,,1009,,,,,,482,482,,1009', '1009,,1009,1009,1009,1009,1009,1009,1009,,482,1009,1009,,,482,1009,1009', '1009,1009,,,,,,1009,,,,,,,,1009,1009,,1009,1009,1009,1009,1009,1009', '1009,1009,1009,1009,1009,,,1009,,,,,,,,,,516,516,,,516,,,,,,1009,,,516', '516,1009,516,516,516,516,516,516,516,,,516,516,,,,516,516,516,516,,', ',,,516,,,,,,,,516,516,,516,516,516,516,516,516,516,516,516,516,516,', ',516,,,,,,,,,,586,586,,,586,,,,,,516,,,586,586,516,586,586,586,586,586', '586,586,,,586,586,,,,586,586,586,586,,,,,,586,,,,,,,,586,586,,586,586', '586,586,586,586,586,586,586,586,586,,,586,,,,,,,,,,959,959,,,959,,,', ',,586,,,959,959,586,959,959,959,959,959,959,959,,,959,959,,,,959,959', '959,959,,,,,,959,,,,,,,,959,959,,959,959,959,959,959,959,959,959,959', '959,959,,,959,,,,,,,,,,746,746,,,746,,,,,,959,,,746,746,959,746,746', '746,746,746,746,746,,,746,746,,,,746,746,746,746,,,,,,746,,,,,,,,746', '746,,746,746,746,746,746,746,746,746,746,746,746,,,746,,,,,,,,,,1008', '1008,,,1008,,,,,,746,,,1008,1008,746,1008,1008,1008,1008,1008,1008,1008', ',,1008,1008,,,,1008,1008,1008,1008,,,,,,1008,,,,,,,,1008,1008,,1008', '1008,1008,1008,1008,1008,1008,1008,1008,1008,1008,,,1008,,,,,,,,,,448', '448,,,448,,,,,,1008,,,448,448,1008,448,448,448,448,448,448,448,,,448', '448,,,,448,448,448,448,,,,,,448,,,,,,,,448,448,,448,448,448,448,448', '448,448,448,448,448,448,,,448,,,,,,,,,,449,449,,,449,,,,,,448,,,449', '449,448,449,449,449,449,449,449,449,,,449,449,,,,449,449,449,449,,,', ',,449,,,,,,,,449,449,,449,449,449,449,449,449,449,449,449,449,449,,', '449,,,,,,,,,,527,527,,,527,,,,,,449,,,527,527,449,527,527,527,527,527', '527,527,,,527,527,,,,527,527,527,527,,,,,,527,,,,,,,,527,527,,527,527', '527,527,527,527,527,527,527,527,527,,,527,,,,,,,,,,745,745,,,745,,,', ',,527,,,745,745,527,745,745,745,745,745,745,745,,,745,745,,,,745,745', '745,745,,,,,,745,,,,,,,,745,745,,745,745,745,745,745,745,745,745,745', '745,745,,,745,,,,,,,,,,515,515,,,515,,,,,,745,,,515,515,745,515,515', '515,515,515,515,515,,,515,515,,,,515,515,515,515,,,,,,515,,,,,,,,515', '515,,515,515,515,515,515,515,515,515,515,515,515,,,515,,,,,,,,,,212', '212,,,212,,,,,,515,,,212,212,515,212,212,212,212,212,212,212,,,212,212', ',,,212,212,212,212,,,,,,212,,,,,,,,212,212,,212,212,212,212,212,212', '212,212,212,212,212,,,212,,,,,,,,,,211,211,,,211,,,,,,212,,,211,211', '212,211,211,211,211,211,211,211,,,211,211,,,,211,211,211,211,,,,,,211', ',,,,,,,211,211,,211,211,211,211,211,211,211,211,211,211,211,,,211,,', ',,,,,,,528,528,,,528,,,,,,211,,,528,528,211,528,528,528,528,528,528', '528,,,528,528,,,,528,528,528,528,,,,,,528,,,,,,,,528,528,,528,528,528', '528,528,528,528,528,528,528,528,,,528,,,,,,,,,,587,587,,,587,,,,,,528', ',,587,587,528,587,587,587,587,587,587,587,,,587,587,,,,587,587,587,587', ',,,,,587,,,,,,,,587,587,,587,587,587,587,587,587,587,587,587,587,587', ',710,587,710,710,710,710,710,,,,,261,261,,,261,710,,,,,587,,,261,261', '587,261,261,261,261,261,261,261,,,261,261,710,,,261,261,261,261,,,710', '710,710,710,,,,,,,,261,261,,261,261,261,261,261,261,261,261,261,261', '261,,913,261,913,913,913,913,913,,,,710,,,,,,913,,,,,261,,,,599,261', '599,599,599,599,599,,,,,,,913,,336,599,336,336,336,336,336,913,913,913', '913,,,,,546,336,546,546,546,546,546,,599,599,,,,,,,546,599,599,599,599', ',,336,336,,,,913,,,,336,336,336,336,,,546,,,,,,,,,546,546,546,546,,', '599,,,,,,,,,,,,,,,336,,,,,,,,,,,,,,,546' ] racc_action_check = arr = ::Array.new(25662, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_action_pointer = [ nil, 1394, 2691, 45, nil, 80, nil, nil, 12641, 917, nil, 1607, 1193, -48, nil, -10, 73, 1174, 420, 39, 693, nil, 88, 14953, 3513, 198, nil, 270, nil, 2, 24139, 23889, 7881, 8017, 8425, nil, 5568, 8969, 9105, nil, 106, 430, 432, 191, 504, 9921, 10193, 10601, 135, 459, nil, nil, nil, nil, nil, nil, nil, nil, nil, 23499, nil, -73, 11553, nil, 34, nil, 11825, 11961, nil, nil, 12369, 12505, 206, nil, 1469, nil, nil, nil, nil, nil, 64, nil, nil, nil, nil, nil, nil, 163, 175, 221, 227, 1331, nil, nil, nil, 255, nil, nil, 385, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 13457, nil, nil, nil, nil, 13593, 13729, 13865, 14001, 14137, 265, nil, 262, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 276, nil, 3787, 15361, 15633, 16313, 25191, 25118, nil, 16721, 16857, 16993, 17129, 17265, 17401, nil, nil, 1228, 134, 170, 362, 173, 289, 344, nil, 18081, 4061, 347, 18217, 18625, 19305, 19713, 20121, 20257, 20393, 20529, 20665, 21073, 21209, 21345, 21481, 21617, 21889, 22025, 22161, 22433, 22569, 22841, 22977, 23113, 23249, 5841, 6249, 6657, nil, nil, 25410, nil, nil, 346, 7473, nil, 361, nil, nil, nil, 7609, nil, nil, 7745, nil, 3650, nil, 348, 352, nil, 8289, 432, 8561, nil, 400, 8697, nil, nil, 265, nil, 779, 8833, 405, 2280, 449, 505, 472, 9241, 3102, 1055, 1056, 648, 556, 611, nil, 535, 506, -19, nil, nil, nil, 553, 630, 529, 10329, nil, 260, 597, 608, -59, nil, 618, nil, 10873, 4198, nil, 11009, 602, nil, 261, 161, 602, 11145, nil, nil, 25512, 666, 19, -9, 11281, 11417, 450, 690, 590, 27, 26, 956, 677, 30, 712, nil, nil, 12097, nil, 12233, 532, 425, 338, 419, 484, 519, 223, 424, 463, nil, 465, nil, nil, nil, nil, nil, 281, nil, 285, nil, 155, nil, 617, 313, nil, 627, 378, nil, 634, 117, nil, 638, 125, nil, -26, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 3650, 779, nil, nil, nil, nil, 652, nil, 676, nil, 12777, 677, nil, 1869, 681, nil, nil, 703, 704, 130, 434, 24014, nil, nil, nil, 515, 0, 745, nil, nil, 23759, 23629, nil, 2828, nil, 701, nil, nil, 1732, nil, nil, nil, nil, -26, nil, 24753, 24826, 12913, -75, 13049, 13185, 13321, 4335, 5568, 504, 343, 778, 790, 791, 792, 671, 908, 770, 5431, 5294, 5157, 5020, 4472, 4198, 6113, 4061, 5705, 4609, -43, 595, 4746, 4883, 2143, 198, 24264, nil, nil, nil, nil, nil, nil, 191, -43, 739, 745, nil, nil, 14273, nil, nil, 14409, nil, 14545, nil, 14681, nil, nil, 14817, 631, 746, 750, nil, nil, 763, 15089, 771, 15225, 25045, 24388, 1195, 815, nil, nil, 15497, 785, nil, 15769, 15905, 16041, 24899, 25264, 3787, 16177, 908, 907, 727, nil, nil, 16449, nil, nil, 16585, nil, 804, nil, 501, 855, 74, 25527, nil, 816, 841, nil, 842, 844, 845, nil, nil, nil, nil, nil, nil, 843, nil, 580, nil, 17537, nil, nil, nil, 944, nil, nil, nil, 945, nil, nil, 946, 4746, 991, nil, 4472, 55, 32, 994, 1008, nil, 17673, 24461, 25337, 28, nil, 224, 354, -7, nil, 551, nil, 16, 17809, nil, 25497, nil, 17945, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 182, nil, nil, -32, nil, nil, nil, 899, nil, nil, 900, nil, 920, nil, 1055, nil, 906, 18353, 18489, 398, 941, 18761, 18897, 19033, 19169, 940, nil, nil, nil, 19441, 19577, 941, nil, 19849, 19985, nil, 229, 230, 640, 125, 916, 2006, 924, nil, nil, 479, nil, nil, 1026, 63, -71, nil, nil, nil, nil, 925, nil, 967, 20801, nil, nil, nil, 937, -107, 20937, 953, nil, 957, 146, 159, 1004, 355, 813, 1005, 967, 21753, 3376, 1030, 1031, 10, 1094, 22297, nil, 990, 438, nil, nil, nil, 4335, 2143, 991, 439, nil, nil, 538, 23853, nil, 25399, nil, 6565, nil, 22705, nil, 813, nil, 989, 190, nil, 1003, nil, nil, nil, nil, 637, nil, 1129, nil, nil, nil, nil, 1135, nil, 23385, 1019, -1, 25, 94, 149, 5977, nil, 1194, nil, 24972, 24607, 6113, nil, nil, nil, 416, 153, 2417, 2828, 24228, 180, 917, -16, 842, 5157, nil, nil, nil, nil, nil, nil, nil, 1017, 6385, 3239, 6521, nil, 1019, nil, 3102, nil, 2417, nil, nil, 2280, nil, 2691, nil, 2554, 6793, 6929, 7065, 7201, 140, 7337, 1023, 1026, nil, 1044, 1047, 1048, nil, 1072, 1056, 1054, 1046, 8153, nil, nil, 3513, nil, nil, nil, 2006, 1732, nil, nil, 1061, 259, nil, nil, 1183, nil, 5294, 1063, 1105, nil, nil, nil, nil, 1106, 1211, 1095, 1103, nil, nil, nil, 1104, 1105, nil, 1106, 1107, nil, 1117, nil, 1121, 606, 1120, 951, nil, 1241, nil, 9377, 1242, 3376, 3239, nil, 43, 62, 56, 393, 954, nil, 1127, 2965, 9513, nil, 289, 1245, 1246, 1130, nil, nil, nil, nil, nil, nil, nil, nil, 1154, 1152, nil, 3924, 9649, 9785, 2965, 374, nil, nil, 24103, nil, nil, 23978, nil, 6701, nil, nil, 1173, 785, 10057, 1227, 1229, 1276, 1869, 1173, 1281, nil, 5705, nil, nil, -7, 10465, nil, nil, nil, nil, nil, 25472, nil, 7109, nil, 5885, nil, 6293, nil, nil, nil, nil, 321, 992, 1164, nil, 18, nil, 1300, 1301, 10737, 5431, nil, nil, 1302, 288, nil, nil, nil, nil, 23593, nil, 1185, nil, nil, 1186, 1187, 1188, 1190, nil, 1191, nil, 486, nil, nil, nil, 1036, 24534, nil, nil, 1210, nil, nil, nil, 2554, 1057, 1089, 1090, 1269, 1094, nil, 1196, 1197, 1199, 1200, 1201, 633, 1202, 855, 5020, nil, nil, nil, 351, 4883, nil, nil, 4609, 3924, nil, 23723, nil, 6837, nil, 6973, nil, 6021, nil, nil, nil, 705, 1267, 1268, nil, 1352, 11689, 24680, 24315, 1093, 6429, nil, nil, nil, nil, 1058, 1241, 765, nil, nil, nil, 1362, 1363, 1364, 1245, 1258, 1260, 1261, nil, nil, 1265, -11, -10, 45, 1193, 1263, 1264, nil, nil, nil, nil, 7245, nil, nil, nil, nil, 17, nil, -114, nil ] racc_action_default = [ -1, -620, -619, -620, -2, -606, -4, -5, -620, -8, -9, -620, -620, -620, -29, -620, -620, -620, -281, -620, -41, -44, -608, -620, -49, -51, -52, -53, -58, -260, -260, -260, -295, -334, -335, -70, -619, -74, -82, -84, -620, -515, -516, -620, -620, -620, -620, -620, -608, -241, -272, -273, -274, -275, -276, -277, -278, -279, -280, -595, -283, -286, -619, -293, -303, -406, -620, -620, -308, -311, -606, -620, -319, -326, -620, -336, -337, -448, -449, -450, -451, -452, -453, -619, -456, -619, -619, -619, -619, -619, -619, -619, -493, -499, -500, -593, -504, -505, -594, -507, -508, -509, -510, -511, -512, -513, -514, -519, -520, 1051, -3, -607, -615, -616, -617, -7, -620, -620, -620, -620, -620, -620, -17, -620, -113, -114, -115, -116, -117, -118, -119, -120, -121, -125, -126, -127, -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, -189, -190, -191, -192, -193, -194, -195, -196, -22, -122, -619, -620, -620, -619, -620, -620, -605, -620, -620, -620, -620, -620, -608, -609, -48, -620, -515, -516, -620, -281, -620, -620, -233, -620, -619, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -620, -412, -415, -620, -603, -604, -59, -620, -302, -620, -429, -432, -65, -619, -426, -66, -608, -67, -242, -255, -619, -619, -259, -620, -265, -620, -588, -608, -620, -68, -69, -606, -13, -14, -620, -72, -619, -608, -620, -75, -78, -619, -90, -91, -620, -620, -98, -295, -298, -608, -419, -334, -335, -338, -427, -620, -80, -620, -86, -291, -501, -502, -620, -218, -219, -234, -620, -619, -285, -620, -620, -243, -612, -612, -620, -619, -304, -305, -547, -50, -620, -620, -620, -620, -606, -620, -607, -515, -516, -620, -620, -281, -620, -359, -360, -620, -322, -620, -113, -114, -156, -157, -158, -174, -179, -186, -189, -329, -620, -515, -516, -583, -584, -454, -620, -477, -620, -479, -620, -481, -620, -620, -461, -620, -620, -467, -620, -620, -473, -620, -620, -475, -620, -492, -494, -495, -496, -497, -6, -618, -23, -24, -25, -26, -27, -619, -620, -19, -20, -21, -123, -620, -30, -39, -40, -620, -620, -31, -199, -608, -250, -251, -619, -619, -596, -597, -260, -424, -598, -599, -597, -596, -260, -423, -425, -598, -599, -37, -207, -38, -620, -42, -43, -197, -265, -45, -46, -47, -608, -301, -620, -620, -619, -291, -620, -620, -620, -208, -209, -210, -211, -212, -213, -214, -215, -220, -221, -222, -223, -224, -225, -226, -227, -228, -229, -230, -231, -232, -235, -236, -237, -238, -608, -619, -260, -596, -597, -55, -60, -261, -420, -619, -619, -608, -608, -297, -256, -620, -264, -257, -620, -262, -620, -266, -620, -592, -12, -607, -16, -608, -71, -289, -87, -76, -620, -608, -619, -620, -620, -97, -620, -501, -502, -620, -83, -88, -620, -620, -620, -620, -620, -239, -620, -440, -620, -287, -610, -244, -614, -613, -246, -614, -292, -620, -586, -612, -620, -620, -547, -409, -582, -582, -530, -532, -532, -532, -546, -548, -549, -550, -551, -552, -553, -554, -620, -556, -620, -562, -564, -565, -567, -572, -574, -575, -577, -578, -579, -620, -619, -350, -351, -619, -620, -620, -620, -620, -435, -619, -620, -620, -291, -316, -108, -109, -620, -111, -620, -281, -620, -620, -327, -547, -331, -620, -455, -478, -483, -484, -486, -457, -480, -458, -482, -459, -460, -620, -463, -465, -620, -466, -469, -470, -620, -471, -472, -620, -498, -620, -18, -620, -28, -271, -620, -620, -428, -620, -252, -254, -620, -620, -61, -248, -249, -421, -620, -620, -63, -422, -620, -620, -300, -596, -597, -596, -597, -608, -197, -620, -395, -396, -608, -398, -413, -54, -416, -619, -430, -433, -247, -296, -619, -263, -267, -620, -589, -590, -591, -15, -73, -620, -79, -85, -608, -596, -597, -619, -94, -96, -620, -81, -620, -206, -216, -217, -608, -619, -619, -284, -608, -612, -294, -587, -407, -619, -619, -608, -620, -528, -529, -620, -620, -539, -620, -542, -620, -544, -620, -361, -620, -363, -365, -372, -553, -608, -558, -566, -576, -580, -619, -352, -619, -309, -353, -354, -312, -620, -315, -620, -608, -596, -597, -600, -290, -620, -108, -109, -110, -620, -620, -619, -320, -521, -522, -620, -323, -619, -619, -547, -620, -620, -608, -620, -619, -462, -464, -468, -474, -476, -10, -124, -269, -620, -200, -620, -611, -619, -33, -202, -34, -203, -62, -35, -205, -36, -204, -64, -198, -620, -620, -620, -620, -428, -620, -582, -582, -377, -619, -619, -619, -394, -620, -608, -400, -553, -620, -560, -570, -619, -418, -417, -56, -619, -619, -258, -268, -77, -92, -89, -299, -619, -357, -619, -441, -619, -442, -443, -288, -245, -620, -620, -608, -582, -563, -581, -531, -532, -532, -557, -532, -532, -573, -532, -568, -608, -620, -370, -620, -555, -620, -355, -620, -620, -619, -619, -314, -620, -428, -620, -108, -109, -112, -608, -619, -620, -524, -620, -620, -620, -608, -526, -332, -585, -485, -488, -489, -490, -491, -620, -270, -32, -201, -253, -620, -240, -620, -375, -376, -385, -379, -387, -620, -390, -620, -392, -397, -620, -620, -620, -559, -620, -620, -619, -620, -620, -11, -619, -447, -358, -620, -620, -445, -410, -411, -408, -527, -620, -535, -620, -537, -620, -540, -620, -543, -545, -362, -364, -368, -620, -373, -306, -620, -307, -620, -620, -620, -619, -317, -428, -620, -620, -324, -328, -330, -525, -547, -487, -582, -561, -378, -619, -619, -619, -619, -571, -619, -399, -608, -402, -404, -405, -569, -620, -291, -414, -620, -431, -434, -446, -619, -99, -100, -620, -620, -107, -444, -532, -532, -532, -532, -366, -620, -371, -620, -619, -310, -313, -267, -619, -619, -321, -523, -619, -619, -374, -620, -382, -620, -384, -620, -388, -620, -391, -393, -401, -620, -290, -600, -57, -440, -619, -620, -620, -106, -620, -533, -536, -538, -541, -620, -369, -619, -436, -437, -438, -620, -620, -620, -619, -619, -619, -619, -403, -439, -608, -596, -597, -600, -105, -532, -367, -356, -318, -325, -333, -620, -380, -383, -386, -389, -428, -534, -619, -381 ] clist = [ '6,218,211,277,277,277,417,532,576,579,17,424,430,583,272,365,17,260', '334,127,127,547,9,311,311,440,632,324,9,412,554,222,392,693,754,297', '437,497,817,261,222,222,222,314,17,302,302,795,122,206,338,339,132,132', '342,846,672,311,114,4,329,482,130,130,835,729,732,491,264,270,273,111', '926,849,222,222,110,838,222,347,721,373,127,375,377,380,383,386,389', '375,486,923,798,705,706,535,538,672,115,127,398,399,400,401,293,744', '295,951,660,374,596,955,598,957,851,390,664,665,613,17,522,616,741,114', '222,222,222,222,17,603,986,9,353,610,860,597,614,828,863,614,402,343', '275,287,288,989,355,753,599,757,942,850,796,979,16,340,333,696,797,327', '16,325,366,748,799,350,335,278,278,278,541,369,954,662,332,545,326,700', '336,497,627,277,481,279,279,279,805,489,16,669,809,490,669,672,810,425', '1019,330,735,821,906,396,834,371,836,372,1017,448,418,899,376,951,379', '331,1,17,222,222,222,1029,434,957,222,222,222,222,222,222,663,923,382', '703,385,893,841,388,277,870,759,17,554,835,277,760,1037,277,653,391', '424,430,861,488,733,404,352,833,205,830,858,945,902,121,789,16,502,601', '341,2,,418,,,16,222,947,835,496,496,,222,838,,222,,311,,518,515,29,814', '808,,,554,29,,272,,,,17,311,17,511,,527,302,17,699,29,680,,506,523,', '683,,678,29,29,29,,29,302,580,581,687,683,669,669,1020,542,586,17,447', '222,883,884,,311,934,311,114,414,,854,,1038,222,222,414,,29,29,835,505', '29,,,16,504,594,293,594,507,,,293,,513,762,,,762,912,487,,990,600,948', ',736,949,16,492,,683,,,493,,,,,,114,633,29,,,278,6,29,29,29,29,29,973', '640,278,508,17,127,582,645,,279,,496,496,,277,639,9,,279,811,,,,,,425', ',715,864,865,672,,221,866,626,,,16,132,16,,418,554,,16,709,711,713,130', '440,434,222,655,625,,825,638,778,,640,,935,644,783,,,,,,,16,,656,639', ',813,,543,277,1025,656,656,991,,,,29,29,29,29,,311,425,29,29,29,29,29', '29,,311,1030,,523,425,418,17,,822,,29,,523,302,661,222,933,434,675,', ',,302,,811,296,,19,,434,,222,,19,,936,859,,,683,,,,,29,,,,16,277,29', ',,29,648,,,,,,,19,,425,,,669,,,966,,29,,29,,,418,17,29,,17,715,,,843', ',222,,434,,,981,,,,,351,,222,666,667,,222,,29,,29,,,807,,,,,,676,,410', '415,29,29,679,,435,439,633,730,730,127,554,800,,,1047,,,19,222,222,668', ',,749,222,222,19,806,222,1021,,16,,633,,656,,311,767,,496,640,132,,645', '1023,1024,,311,523,,,130,,,639,800,,,302,815,697,,29,,818,823,,,,302', ',868,,,,,409,,,,,,17,17,,,,715,633,715,,277,,,,,,818,855,818,296,16', ',425,16,,,914,916,29,918,920,19,921,,,,,418,,438,,222,,,,434,,222,,', ',,,17,17,19,,127,,,17,,,496,,,,,,,800,222,,,,,,773,,,311,,296,29,886', '886,886,296,977,715,,,29,,,1031,862,,,816,683,867,896,824,,17,,904,29', '17,17,908,,,,,19,,19,17,,414,,19,928,,,,845,,633,792,,,,,,937,,,,,715', ',715,16,16,,222,19,17,17,,,29,,,29,,,17,222,853,29,,869,1012,1013,1014', '1015,,,,311,,29,,829,,29,715,,,,,311,,,,,,,,,,958,,16,16,17,730,,,17', '16,,,969,938,,,,,,29,29,,794,,,29,29,,,29,1001,,19,,1048,,,,17,,911', ',886,886,886,886,,886,,,,1008,,922,16,,,,16,16,,,,,434,,337,337,16,', '337,17,,,837,277,839,,941,,818,,,,29,29,17,988,,425,,17,,,17,17,,,,16', '16,,418,,41,,,633,,16,41,,222,818,434,,337,337,337,337,886,886,886,886', '29,,,,,,29,,,,19,,29,29,41,300,300,,,29,886,,,,16,774,776,,16,,29,779', '781,,,439,944,,,792,,,792,,792,726,,,728,345,,,367,,,,,,16,,,,,,29,', ',,29,29,,,,,,793,,,29,,,19,,,19,,,,,41,,16,443,444,445,446,,,41,,,,', ',,,16,29,,29,29,16,,,16,16,,,,29,29,831,,,831,,,,950,,952,,,,,,,,,,', ',,,,,792,,792,,792,438,792,974,,975,,976,29,,877,,29,,,,18,,,,826,827', '18,,,,,,,,,,,,,41,,,42,887,889,891,29,,42,,792,,,,18,304,304,533,,,19', '19,,41,,,,,,,337,337,,,,,42,301,301,29,,,,875,,,1026,,1027,349,1028', ',,,29,,,,,29,,,29,29,,1036,,,,,,346,19,19,368,,,,,19,29,,,,41,,41,,898', '18,300,41,900,901,,,1049,,18,,,,905,,,,,300,,,,42,,831,,,793,41,,793', '42,793,,,19,,,,19,19,,,,930,931,,,,19,,,,,,,367,,367,,,,,,,,,993,995', '997,999,,1000,,,,,,,,19,19,,,,,,,,,19,,,962,,,18,965,,,,,,,,,41,,,,', ',,,,,,,42,,18,,,,,,,985,,19,,692,,19,793,,793,972,793,,793,,42,,,1043', '1044,1045,1046,,,,,,,,,,,,1006,,,19,,,,,,1050,,,,,,1018,,,,,1022,18', ',18,793,,,304,18,,,,,,,,19,,752,,,,758,42,304,42,,,41,301,42,19,,,18', '300,19,,,19,19,,,,300,,301,,,,,,,,,,42,,,,,,595,,595,,,,,,,,,,,,,,,', ',,,,368,,368,,,,,,,,,,,,,41,,,41,,,,,,411,,,,18,,,442,,,,,,,,,,,,,,', ',,,,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,337,,,,,,,,,,,,,,,,,,,499,,501,,,503', ',,,,,,,,,,,,,300,,,,,,,,,,,300,,,18,,,,,,,304,,,41,41,,,,,304,,,544', ',,42,,,,,,,301,,,,,,,,,301,,,,,,,,,,,,,,,,,337,,,,,,,41,41,,,,,337,41', ',18,,,18,,,,,,,,,,,,,,,,,,,42,,,42,,,629,,,,,,,,,,,,367,,,41,,,,41,41', ',,,,,,,,41,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,41,41,,,,,,,,,41,,,304,,,,', ',,,,670,,304,544,,673,,674,,,,,,301,,18,18,,,,,,,367,301,,,41,,,,41', ',,,967,,42,42,,,670,,,544,,,,,,,,,,,,,,,,,41,,,,,,18,18,722,,,,874,18', ',,,,,,,,,,,,,,42,42,,,,41,,42,,,,,,,,,,,,,41,,,,,41,,595,41,41,18,229', ',,18,18,,,,,276,276,276,,18,,768,,,368,670,544,42,321,322,323,42,42', ',,,,,,,,42,,,,276,,,,,18,18,,,,,,,,,18,,812,,,,,,,,,,42,42,,,,,,,,,42', ',,820,,,,,,,,,,595,,,,18,,,,18,,840,,971,,,,,,,,,,368,,,,42,,,,42,442', ',,968,,,,18,,,,,,,,,,,,,,,,,,,,,,42,,,,,876,,,,,,18,,,,,,,,,,,,,,,18', ',,,,18,,42,18,18,276,416,276,,,,436,441,,,,,42,,,,,42,,,42,42,229,,', '455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471', '472,473,474,475,476,477,478,479,480,,,,,,,276,,,,,,276,,,276,,,,,,,276', ',276,,,276,544,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,529,,,,,,,,,276,', ',,,,,984,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,,436,654,416', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,,,276,,276,,276,,,,,,,,', ',,,276,,,,,,,,,,689,690,691,,,,,,,,,,276,,,276,,,,,,,,,,,,,,,,,,,,,', ',,,276,,,,,,,,,,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,276,770,,,276,276,775,777,,,,,780,782,,,654,784,,,,,,,,,,,,,', ',,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,276,,,,,', ',,,,,,,,,,,,,,,276,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,276,,878,,,,', ',,,,,,,,,775,777,782,780,,881,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,878,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,276' ] racc_goto_table = arr = ::Array.new(2982, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '6,34,27,36,36,36,25,10,90,90,24,40,40,93,72,60,24,153,87,61,61,152,9', '67,67,20,26,34,9,30,183,24,60,13,97,53,30,74,14,39,24,24,24,54,24,24', '24,142,17,17,19,19,65,65,19,91,196,67,96,2,6,40,64,64,187,92,92,25,41', '41,41,8,133,14,24,24,5,191,24,24,132,6,61,6,6,6,6,6,6,6,42,130,145,137', '137,70,70,196,7,61,19,19,19,19,49,58,50,192,43,170,59,147,59,148,106', '170,43,43,173,24,55,173,107,96,24,24,24,24,24,174,108,9,109,174,110', '111,174,145,112,174,9,5,48,48,48,113,114,115,116,117,118,104,143,133', '23,103,102,101,134,100,23,99,98,95,140,94,89,69,69,69,86,85,146,73,68', '149,51,150,151,74,66,36,154,71,71,71,155,158,23,75,159,160,75,196,161', '72,162,69,163,164,165,7,143,168,143,169,133,27,6,46,171,192,172,71,1', '24,24,24,24,147,61,148,24,24,24,24,24,24,45,130,175,152,176,145,132', '177,36,178,179,24,183,187,36,180,133,36,25,181,40,40,182,72,93,33,21', '186,18,188,58,189,15,11,26,23,34,195,105,3,,6,,,23,24,142,187,6,6,,24', '191,,24,,67,,34,27,44,26,43,,,183,44,,72,,,,24,67,24,54,,27,24,24,70', '44,25,,9,53,,40,,55,44,44,44,,44,24,19,19,55,40,75,75,14,6,27,24,51', '24,137,137,,67,92,67,96,69,,26,,91,24,24,69,,44,44,187,8,44,,,23,5,24', '49,24,50,,,49,,50,174,,,174,137,48,,97,39,143,,25,143,23,48,,40,,,51', ',,,,,96,34,44,,,69,6,44,44,44,44,44,143,72,69,51,24,61,5,72,,71,,6,6', ',36,6,9,,71,74,,,,,,72,,131,10,10,196,,22,152,17,,,23,65,23,,6,183,', '23,185,185,185,64,20,61,24,34,2,,70,41,42,,72,,26,41,42,,,,,,,23,,6', '6,,55,,71,36,143,6,6,137,,,,44,44,44,44,,67,72,44,44,44,44,44,44,,67', '13,,53,72,6,24,,30,,44,,53,24,41,24,90,61,9,,,,24,,74,12,,29,,61,,24', ',29,,10,25,,,40,,,,,44,,,,23,36,44,,,44,51,,,,,,,29,,72,,,75,,,90,,44', ',44,,,6,24,44,,24,131,,,131,,24,,61,,,90,,,,,29,,24,51,51,,24,,44,,44', ',,87,,,,,,51,,22,22,44,44,51,,22,22,34,96,96,61,183,34,,,26,,,29,24', '24,71,,,96,24,24,29,153,24,93,,23,,34,,6,,67,17,,6,72,65,,72,10,10,', '67,53,,,64,,,6,34,,,24,53,71,,44,,6,6,,,,24,,60,,,,,12,,,,,,24,24,,', ',131,34,131,,36,,,,,,6,19,6,12,23,,72,23,,,185,185,44,185,185,29,185', ',,,,6,,29,,24,,,,61,,24,,,,,,24,24,29,,61,,,24,,,6,,,,,,,34,24,,,,,', '71,,,67,,12,44,6,6,6,12,131,131,,,44,,,25,96,,,51,40,96,24,51,,24,,6', '44,24,24,6,,,,,29,,29,24,,69,,29,19,,,,51,,34,136,,,,,,19,,,,,131,,131', '23,23,,24,29,24,24,,,44,,,44,,,24,24,69,44,,51,185,185,185,185,,,,67', ',44,,136,,44,131,,,,,67,,,,,,,,,,24,,23,23,24,96,,,24,23,,,24,96,,,', ',,44,44,,141,,,44,44,,,44,34,,29,,185,,,,24,,51,,6,6,6,6,,6,,,,27,,51', '23,,,,23,23,,,,,61,,32,32,23,,32,24,,,141,36,141,,51,,6,,,,44,44,24', '96,,72,,24,,,24,24,,,,23,23,,6,,56,,,34,,23,56,,24,6,61,,32,32,32,32', '6,6,6,6,44,,,,,,44,,,,29,,44,44,56,56,56,,,44,6,,,,23,22,22,,23,,44', '22,22,,,22,136,,,136,,,136,,136,12,,,12,56,,,56,,,,,,23,,,,,,44,,,,44', '44,,,,,,138,,,44,,,29,,,29,,,,,56,,23,32,32,32,32,,,56,,,,,,,,23,44', ',44,44,23,,,23,23,,,,44,44,138,,,138,,,,141,,141,,,,,,,,,,,,,,,,136', ',136,,136,29,136,141,,141,,141,44,,22,,44,,,,28,,,,12,12,28,,,,,,,,', ',,,,56,,,57,139,139,139,44,,57,,136,,,,28,28,28,32,,,29,29,,56,,,,,', ',32,32,,,,,57,57,57,44,,,,12,,,141,,141,28,141,,,,44,,,,,44,,,44,44', ',141,,,,,,57,29,29,57,,,,,29,44,,,,56,,56,,12,28,56,56,12,12,,,141,', '28,,,,12,,,,,56,,,,57,,138,,,138,56,,138,57,138,,,29,,,,29,29,,,,12', '12,,,,29,,,,,,,56,,56,,,,,,,,,139,139,139,139,,139,,,,,,,,29,29,,,,', ',,,,29,,,12,,,28,12,,,,,,,,,56,,,,,,,,,,,,57,,28,,,,,,,12,,29,,32,,29', '138,,138,29,138,,138,,57,,,139,139,139,139,,,,,,,,,,,,12,,,29,,,,,,139', ',,,,,12,,,,,12,28,,28,138,,,28,28,,,,,,,,29,,32,,,,32,57,28,57,,,56', '57,57,29,,,28,56,29,,,29,29,,,,56,,57,,,,,,,,,,57,,,,,,28,,28,,,,,,', ',,,,,,,,,,,,,57,,57,,,,,,,,,,,,,56,,,56,,,,,,31,,,,28,,,31,,,,,,,,,', ',,,,,,,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,,,,,,31,,31,', ',31,,,,,,,,,,,,,,56,,,,,,,,,,,56,,,28,,,,,,,28,,,56,56,,,,,28,,,31,', ',57,,,,,,,57,,,,,,,,,57,,,,,,,,,,,,,,,,,32,,,,,,,56,56,,,,,32,56,,28', ',,28,,,,,,,,,,,,,,,,,,,57,,,57,,,31,,,,,,,,,,,,56,,,56,,,,56,56,,,,', ',,,,56,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,56,,,,,,,,,56,,,28,,,,,,,,,31', ',28,31,,31,,31,,,,,,57,,28,28,,,,,,,56,57,,,56,,,,56,,,,56,,57,57,,', '31,,,31,,,,,,,,,,,,,,,,,56,,,,,,28,28,31,,,,28,28,,,,,,,,,,,,,,,57,57', ',,,56,,57,,,,,,,,,,,,,56,,,,,56,,28,56,56,28,35,,,28,28,,,,,35,35,35', ',28,,31,,,57,31,31,57,35,35,35,57,57,,,,,,,,,57,,,,35,,,,,28,28,,,,', ',,,,28,,31,,,,,,,,,,57,57,,,,,,,,,57,,,31,,,,,,,,,,28,,,,28,,,,28,,31', ',28,,,,,,,,,,57,,,,57,,,,57,31,,,57,,,,28,,,,,,,,,,,,,,,,,,,,,,57,,', ',,31,,,,,,28,,,,,,,,,,,,,,,28,,,,,28,,57,28,28,35,35,35,,,,35,35,,,', ',57,,,,,57,,,57,57,35,,,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35', '35,35,35,35,35,35,35,35,35,35,35,,,,,,,35,,,,,,35,,,35,,,,,,,35,,35', ',,35,31,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,35,,,,,,,31,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,35,35,35,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,35,,35,,35,,,,,,,,,,,,35,,,,,,,,,,35', '35,35,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,', ',,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,,,35,35,35,35', ',,,,35,35,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,,35', ',,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,35,,,,,,,,,', ',,,,,,,,,,,,35,,35,,,,,,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ] racc_goto_check = arr = ::Array.new(2982, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_goto_pointer = [ nil, 214, 57, 267, nil, 71, -2, 90, 66, 20, -318, 251, 496, -498, -655, -557, nil, 37, 244, -16, -190, 183, 416, 152, 8, -204, -391, -15, 1191, 532, -179, 1382, 903, 131, -21, 1974, -29, nil, nil, 12, -200, 39, -174, -373, 286, -257, -599, nil, 110, 68, 70, 115, nil, -2, 5, -195, 1005, 1213, -487, -243, -59, 8, nil, nil, 51, 41, -228, -14, 112, 135, -235, 151, -16, -309, -242, -306, nil, nil, nil, nil, nil, nil, nil, nil, nil, 97, -163, -46, nil, 101, -330, -671, -515, -330, 94, -433, 53, -565, 88, 101, 98, -376, 93, 87, -578, 197, -618, -467, -804, 60, -614, -219, -614, -793, 73, -451, -217, -451, -718, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, -751, -128, -482, -772, -500, nil, 181, -455, 444, 422, -494, 267, -611, -506, nil, -566, -722, -783, -781, -161, -368, 113, -315, -8, -77, -474, nil, nil, -81, -474, -78, -471, -789, -386, -495, -621, nil, nil, 123, 122, 24, 124, 125, -261, -243, 142, 143, 145, -522, -367, -363, 156, -500, -306, nil, -99, -453, -644, -447, -623, nil, -633, -781, nil, nil, -105, -442 ] racc_goto_default = [ nil, nil, nil, nil, 5, nil, 290, 7, 344, 291, nil, nil, 531, nil, 847, nil, 289, nil, nil, nil, 14, 15, 21, 228, 320, nil, nil, 746, 226, 227, nil, 282, 20, nil, 328, 24, 25, 26, 27, nil, 686, nil, nil, nil, 308, nil, nil, 28, 419, 35, nil, nil, 37, 40, 39, nil, 223, 224, 593, nil, 129, 427, 128, 131, 78, 79, nil, 49, nil, 420, nil, 421, 432, 641, 494, 280, 265, 50, 51, 52, 53, 54, 55, 56, 57, 58, nil, 266, 64, nil, nil, nil, nil, nil, nil, nil, 577, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 717, 561, nil, 718, 946, 791, 549, nil, 550, nil, nil, 551, nil, 553, 657, nil, nil, nil, 559, nil, nil, nil, 756, nil, nil, nil, 431, 267, nil, nil, nil, nil, nil, nil, nil, nil, 77, 80, 82, nil, nil, nil, nil, nil, 608, nil, nil, nil, nil, nil, nil, nil, nil, 832, 548, nil, 552, 563, 565, 803, 568, 569, 804, 572, 575, nil, 284 ] racc_reduce_table = [ 0, 0, :racc_error, 0, 145, :_reduce_1, 2, 143, :_reduce_2, 2, 144, :_reduce_3, 1, 146, :_reduce_none, 1, 146, :_reduce_none, 3, 146, :_reduce_6, 2, 146, :_reduce_none, 1, 149, :_reduce_8, 0, 153, :_reduce_9, 5, 149, :_reduce_10, 4, 152, :_reduce_11, 2, 154, :_reduce_12, 1, 158, :_reduce_none, 1, 158, :_reduce_none, 3, 158, :_reduce_15, 2, 158, :_reduce_16, 0, 175, :_reduce_17, 4, 151, :_reduce_18, 3, 151, :_reduce_19, 3, 151, :_reduce_20, 3, 151, :_reduce_21, 2, 151, :_reduce_22, 3, 151, :_reduce_23, 3, 151, :_reduce_24, 3, 151, :_reduce_25, 3, 151, :_reduce_26, 3, 151, :_reduce_27, 4, 151, :_reduce_28, 1, 151, :_reduce_none, 3, 151, :_reduce_30, 3, 151, :_reduce_31, 6, 151, :_reduce_32, 5, 151, :_reduce_33, 5, 151, :_reduce_34, 5, 151, :_reduce_35, 5, 151, :_reduce_36, 3, 151, :_reduce_37, 3, 151, :_reduce_38, 3, 151, :_reduce_39, 3, 151, :_reduce_40, 1, 151, :_reduce_none, 3, 162, :_reduce_42, 3, 162, :_reduce_43, 1, 174, :_reduce_none, 3, 174, :_reduce_45, 3, 174, :_reduce_46, 3, 174, :_reduce_47, 2, 174, :_reduce_48, 1, 174, :_reduce_none, 1, 161, :_reduce_50, 1, 164, :_reduce_none, 1, 164, :_reduce_none, 1, 179, :_reduce_none, 4, 179, :_reduce_54, 0, 187, :_reduce_55, 0, 188, :_reduce_56, 6, 184, :_reduce_57, 1, 186, :_reduce_58, 2, 178, :_reduce_59, 3, 178, :_reduce_60, 4, 178, :_reduce_61, 5, 178, :_reduce_62, 4, 178, :_reduce_63, 5, 178, :_reduce_64, 2, 178, :_reduce_65, 2, 178, :_reduce_66, 2, 178, :_reduce_67, 2, 178, :_reduce_68, 2, 178, :_reduce_69, 1, 163, :_reduce_none, 3, 163, :_reduce_71, 1, 192, :_reduce_none, 3, 192, :_reduce_73, 1, 191, :_reduce_74, 2, 191, :_reduce_75, 3, 191, :_reduce_76, 5, 191, :_reduce_77, 2, 191, :_reduce_78, 4, 191, :_reduce_79, 2, 191, :_reduce_80, 4, 191, :_reduce_81, 1, 191, :_reduce_82, 3, 191, :_reduce_83, 1, 195, :_reduce_none, 3, 195, :_reduce_85, 2, 194, :_reduce_86, 3, 194, :_reduce_87, 1, 197, :_reduce_88, 3, 197, :_reduce_89, 1, 196, :_reduce_90, 1, 196, :_reduce_91, 4, 196, :_reduce_92, 3, 196, :_reduce_93, 3, 196, :_reduce_94, 3, 196, :_reduce_95, 3, 196, :_reduce_96, 2, 196, :_reduce_97, 1, 196, :_reduce_98, 1, 171, :_reduce_99, 1, 171, :_reduce_100, 4, 171, :_reduce_101, 3, 171, :_reduce_102, 3, 171, :_reduce_103, 3, 171, :_reduce_104, 3, 171, :_reduce_105, 2, 171, :_reduce_106, 1, 171, :_reduce_107, 1, 200, :_reduce_108, 1, 200, :_reduce_none, 2, 201, :_reduce_110, 1, 201, :_reduce_111, 3, 201, :_reduce_112, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_116, 1, 202, :_reduce_117, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 159, :_reduce_120, 1, 159, :_reduce_none, 1, 160, :_reduce_122, 0, 208, :_reduce_123, 4, 160, :_reduce_124, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 203, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 1, 204, :_reduce_none, 3, 177, :_reduce_197, 5, 177, :_reduce_198, 3, 177, :_reduce_199, 5, 177, :_reduce_200, 6, 177, :_reduce_201, 5, 177, :_reduce_202, 5, 177, :_reduce_203, 5, 177, :_reduce_204, 5, 177, :_reduce_205, 4, 177, :_reduce_206, 3, 177, :_reduce_207, 3, 177, :_reduce_208, 3, 177, :_reduce_209, 3, 177, :_reduce_210, 3, 177, :_reduce_211, 3, 177, :_reduce_212, 3, 177, :_reduce_213, 3, 177, :_reduce_214, 3, 177, :_reduce_215, 4, 177, :_reduce_216, 4, 177, :_reduce_217, 2, 177, :_reduce_218, 2, 177, :_reduce_219, 3, 177, :_reduce_220, 3, 177, :_reduce_221, 3, 177, :_reduce_222, 3, 177, :_reduce_223, 3, 177, :_reduce_224, 3, 177, :_reduce_225, 3, 177, :_reduce_226, 3, 177, :_reduce_227, 3, 177, :_reduce_228, 3, 177, :_reduce_229, 3, 177, :_reduce_230, 3, 177, :_reduce_231, 3, 177, :_reduce_232, 2, 177, :_reduce_233, 2, 177, :_reduce_234, 3, 177, :_reduce_235, 3, 177, :_reduce_236, 3, 177, :_reduce_237, 3, 177, :_reduce_238, 3, 177, :_reduce_239, 6, 177, :_reduce_240, 1, 177, :_reduce_none, 1, 173, :_reduce_242, 1, 210, :_reduce_none, 2, 210, :_reduce_244, 4, 210, :_reduce_245, 2, 210, :_reduce_246, 3, 214, :_reduce_247, 1, 215, :_reduce_none, 1, 215, :_reduce_none, 1, 167, :_reduce_250, 1, 167, :_reduce_251, 2, 167, :_reduce_252, 4, 167, :_reduce_253, 2, 167, :_reduce_254, 1, 190, :_reduce_255, 2, 190, :_reduce_256, 2, 190, :_reduce_257, 4, 190, :_reduce_258, 1, 190, :_reduce_259, 0, 218, :_reduce_260, 2, 183, :_reduce_261, 2, 217, :_reduce_262, 2, 216, :_reduce_263, 1, 216, :_reduce_none, 1, 211, :_reduce_265, 2, 211, :_reduce_266, 3, 211, :_reduce_267, 4, 211, :_reduce_268, 3, 172, :_reduce_269, 4, 172, :_reduce_270, 2, 172, :_reduce_271, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 209, :_reduce_282, 0, 241, :_reduce_283, 4, 209, :_reduce_284, 2, 209, :_reduce_285, 0, 242, :_reduce_286, 0, 243, :_reduce_287, 5, 209, :_reduce_288, 3, 209, :_reduce_289, 3, 209, :_reduce_290, 2, 209, :_reduce_291, 3, 209, :_reduce_292, 0, 244, :_reduce_293, 4, 209, :_reduce_294, 1, 209, :_reduce_295, 4, 209, :_reduce_296, 3, 209, :_reduce_297, 1, 209, :_reduce_298, 5, 209, :_reduce_299, 4, 209, :_reduce_300, 3, 209, :_reduce_301, 2, 209, :_reduce_302, 1, 209, :_reduce_none, 2, 209, :_reduce_304, 2, 209, :_reduce_305, 6, 209, :_reduce_306, 6, 209, :_reduce_307, 0, 245, :_reduce_308, 0, 246, :_reduce_309, 7, 209, :_reduce_310, 0, 247, :_reduce_311, 0, 248, :_reduce_312, 7, 209, :_reduce_313, 5, 209, :_reduce_314, 4, 209, :_reduce_315, 0, 249, :_reduce_316, 0, 250, :_reduce_317, 9, 209, :_reduce_318, 0, 251, :_reduce_319, 0, 252, :_reduce_320, 7, 209, :_reduce_321, 0, 253, :_reduce_322, 0, 254, :_reduce_323, 0, 255, :_reduce_324, 9, 209, :_reduce_325, 0, 256, :_reduce_326, 0, 257, :_reduce_327, 6, 209, :_reduce_328, 0, 258, :_reduce_329, 6, 209, :_reduce_330, 0, 259, :_reduce_331, 0, 260, :_reduce_332, 9, 209, :_reduce_333, 1, 209, :_reduce_334, 1, 209, :_reduce_335, 1, 209, :_reduce_336, 1, 209, :_reduce_337, 1, 166, :_reduce_338, 1, 261, :_reduce_none, 1, 262, :_reduce_none, 1, 263, :_reduce_none, 1, 264, :_reduce_none, 1, 265, :_reduce_none, 1, 266, :_reduce_none, 1, 267, :_reduce_none, 1, 268, :_reduce_none, 1, 269, :_reduce_none, 1, 270, :_reduce_none, 1, 271, :_reduce_none, 1, 232, :_reduce_none, 1, 232, :_reduce_none, 2, 232, :_reduce_none, 1, 234, :_reduce_none, 1, 234, :_reduce_none, 1, 233, :_reduce_none, 5, 233, :_reduce_356, 1, 156, :_reduce_none, 2, 156, :_reduce_358, 1, 236, :_reduce_none, 1, 236, :_reduce_360, 1, 272, :_reduce_none, 3, 272, :_reduce_362, 1, 275, :_reduce_363, 3, 275, :_reduce_364, 1, 274, :_reduce_365, 4, 274, :_reduce_366, 6, 274, :_reduce_367, 3, 274, :_reduce_368, 5, 274, :_reduce_369, 2, 274, :_reduce_370, 4, 274, :_reduce_371, 1, 274, :_reduce_372, 3, 274, :_reduce_373, 4, 276, :_reduce_374, 2, 276, :_reduce_375, 2, 276, :_reduce_376, 1, 276, :_reduce_377, 2, 281, :_reduce_378, 1, 281, :_reduce_none, 6, 282, :_reduce_380, 8, 282, :_reduce_381, 4, 282, :_reduce_382, 6, 282, :_reduce_383, 4, 282, :_reduce_384, 2, 282, :_reduce_385, 6, 282, :_reduce_386, 2, 282, :_reduce_387, 4, 282, :_reduce_388, 6, 282, :_reduce_389, 2, 282, :_reduce_390, 4, 282, :_reduce_391, 2, 282, :_reduce_392, 4, 282, :_reduce_393, 1, 282, :_reduce_394, 1, 185, :_reduce_395, 1, 185, :_reduce_none, 3, 286, :_reduce_397, 1, 286, :_reduce_398, 4, 286, :_reduce_399, 1, 287, :_reduce_none, 4, 287, :_reduce_401, 1, 288, :_reduce_402, 3, 288, :_reduce_403, 1, 289, :_reduce_404, 1, 289, :_reduce_none, 0, 293, :_reduce_406, 3, 231, :_reduce_407, 4, 291, :_reduce_408, 1, 291, :_reduce_409, 3, 292, :_reduce_410, 3, 292, :_reduce_411, 0, 296, :_reduce_412, 0, 297, :_reduce_413, 6, 295, :_reduce_414, 2, 180, :_reduce_415, 4, 180, :_reduce_416, 5, 180, :_reduce_417, 5, 180, :_reduce_418, 0, 299, :_reduce_419, 3, 230, :_reduce_420, 4, 230, :_reduce_421, 4, 230, :_reduce_422, 3, 230, :_reduce_423, 3, 230, :_reduce_424, 3, 230, :_reduce_425, 2, 230, :_reduce_426, 1, 230, :_reduce_427, 4, 230, :_reduce_428, 0, 300, :_reduce_429, 0, 301, :_reduce_430, 6, 229, :_reduce_431, 0, 302, :_reduce_432, 0, 303, :_reduce_433, 6, 229, :_reduce_434, 0, 305, :_reduce_435, 6, 235, :_reduce_436, 1, 304, :_reduce_none, 1, 304, :_reduce_none, 6, 155, :_reduce_439, 0, 155, :_reduce_440, 1, 306, :_reduce_441, 1, 306, :_reduce_none, 1, 306, :_reduce_none, 2, 307, :_reduce_444, 1, 307, :_reduce_none, 2, 157, :_reduce_446, 1, 157, :_reduce_none, 1, 219, :_reduce_448, 1, 219, :_reduce_449, 1, 219, :_reduce_none, 1, 220, :_reduce_451, 1, 309, :_reduce_452, 1, 309, :_reduce_none, 2, 309, :_reduce_454, 3, 310, :_reduce_455, 1, 310, :_reduce_456, 3, 221, :_reduce_457, 3, 222, :_reduce_458, 3, 223, :_reduce_459, 3, 223, :_reduce_460, 1, 314, :_reduce_461, 3, 314, :_reduce_462, 1, 315, :_reduce_none, 2, 315, :_reduce_464, 3, 225, :_reduce_465, 3, 225, :_reduce_466, 1, 317, :_reduce_467, 3, 317, :_reduce_468, 3, 224, :_reduce_469, 3, 224, :_reduce_470, 3, 226, :_reduce_471, 3, 226, :_reduce_472, 1, 318, :_reduce_473, 3, 318, :_reduce_474, 1, 319, :_reduce_475, 3, 319, :_reduce_476, 1, 311, :_reduce_477, 2, 311, :_reduce_478, 1, 312, :_reduce_479, 2, 312, :_reduce_480, 1, 313, :_reduce_481, 2, 313, :_reduce_482, 1, 316, :_reduce_483, 0, 321, :_reduce_484, 3, 316, :_reduce_485, 0, 322, :_reduce_486, 4, 316, :_reduce_487, 1, 320, :_reduce_488, 1, 320, :_reduce_489, 1, 320, :_reduce_490, 1, 320, :_reduce_none, 2, 206, :_reduce_492, 1, 206, :_reduce_493, 1, 323, :_reduce_none, 1, 323, :_reduce_none, 1, 323, :_reduce_none, 1, 323, :_reduce_none, 3, 207, :_reduce_498, 1, 308, :_reduce_none, 1, 308, :_reduce_none, 2, 308, :_reduce_501, 2, 308, :_reduce_502, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 198, :_reduce_none, 1, 199, :_reduce_508, 1, 199, :_reduce_509, 1, 199, :_reduce_510, 1, 199, :_reduce_511, 1, 199, :_reduce_512, 1, 199, :_reduce_513, 1, 199, :_reduce_514, 1, 227, :_reduce_515, 1, 227, :_reduce_516, 1, 165, :_reduce_517, 1, 165, :_reduce_518, 1, 170, :_reduce_519, 1, 170, :_reduce_520, 1, 237, :_reduce_521, 0, 324, :_reduce_522, 4, 237, :_reduce_523, 2, 237, :_reduce_524, 3, 239, :_reduce_525, 2, 239, :_reduce_526, 4, 325, :_reduce_527, 2, 325, :_reduce_528, 2, 325, :_reduce_529, 1, 325, :_reduce_none, 2, 327, :_reduce_531, 0, 327, :_reduce_532, 6, 294, :_reduce_533, 8, 294, :_reduce_534, 4, 294, :_reduce_535, 6, 294, :_reduce_536, 4, 294, :_reduce_537, 6, 294, :_reduce_538, 2, 294, :_reduce_539, 4, 294, :_reduce_540, 6, 294, :_reduce_541, 2, 294, :_reduce_542, 4, 294, :_reduce_543, 2, 294, :_reduce_544, 4, 294, :_reduce_545, 1, 294, :_reduce_546, 0, 294, :_reduce_547, 1, 290, :_reduce_548, 1, 290, :_reduce_549, 1, 290, :_reduce_550, 1, 290, :_reduce_551, 1, 273, :_reduce_none, 1, 273, :_reduce_553, 1, 329, :_reduce_none, 3, 329, :_reduce_555, 1, 283, :_reduce_556, 3, 283, :_reduce_557, 2, 330, :_reduce_558, 2, 331, :_reduce_559, 1, 277, :_reduce_none, 3, 277, :_reduce_561, 1, 326, :_reduce_none, 3, 326, :_reduce_563, 1, 332, :_reduce_none, 1, 332, :_reduce_none, 2, 278, :_reduce_566, 1, 278, :_reduce_567, 3, 333, :_reduce_568, 3, 334, :_reduce_569, 1, 284, :_reduce_570, 3, 284, :_reduce_571, 1, 328, :_reduce_572, 3, 328, :_reduce_573, 1, 335, :_reduce_none, 1, 335, :_reduce_none, 2, 285, :_reduce_576, 1, 285, :_reduce_577, 1, 336, :_reduce_none, 1, 336, :_reduce_none, 2, 280, :_reduce_580, 2, 279, :_reduce_581, 0, 279, :_reduce_582, 1, 240, :_reduce_none, 0, 337, :_reduce_584, 4, 240, :_reduce_585, 1, 228, :_reduce_586, 2, 228, :_reduce_587, 1, 213, :_reduce_none, 3, 213, :_reduce_589, 3, 338, :_reduce_590, 3, 338, :_reduce_591, 2, 338, :_reduce_592, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 189, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 298, :_reduce_none, 1, 298, :_reduce_none, 1, 298, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 169, :_reduce_none, 0, 147, :_reduce_none, 1, 147, :_reduce_none, 0, 176, :_reduce_none, 1, 176, :_reduce_none, 2, 193, :_reduce_none, 2, 168, :_reduce_none, 0, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 238, :_reduce_615, 1, 238, :_reduce_none, 1, 150, :_reduce_none, 2, 150, :_reduce_618, 0, 148, :_reduce_619 ] racc_reduce_n = 620 racc_shift_n = 1051 racc_token_table = { false => 0, :error => 1, :kCLASS => 2, :kMODULE => 3, :kDEF => 4, :kUNDEF => 5, :kBEGIN => 6, :kRESCUE => 7, :kENSURE => 8, :kEND => 9, :kIF => 10, :kUNLESS => 11, :kTHEN => 12, :kELSIF => 13, :kELSE => 14, :kCASE => 15, :kWHEN => 16, :kWHILE => 17, :kUNTIL => 18, :kFOR => 19, :kBREAK => 20, :kNEXT => 21, :kREDO => 22, :kRETRY => 23, :kIN => 24, :kDO => 25, :kDO_COND => 26, :kDO_BLOCK => 27, :kDO_LAMBDA => 28, :kRETURN => 29, :kYIELD => 30, :kSUPER => 31, :kSELF => 32, :kNIL => 33, :kTRUE => 34, :kFALSE => 35, :kAND => 36, :kOR => 37, :kNOT => 38, :kIF_MOD => 39, :kUNLESS_MOD => 40, :kWHILE_MOD => 41, :kUNTIL_MOD => 42, :kRESCUE_MOD => 43, :kALIAS => 44, :kDEFINED => 45, :klBEGIN => 46, :klEND => 47, :k__LINE__ => 48, :k__FILE__ => 49, :k__ENCODING__ => 50, :tIDENTIFIER => 51, :tFID => 52, :tGVAR => 53, :tIVAR => 54, :tCONSTANT => 55, :tLABEL => 56, :tCVAR => 57, :tNTH_REF => 58, :tBACK_REF => 59, :tSTRING_CONTENT => 60, :tINTEGER => 61, :tFLOAT => 62, :tREGEXP_END => 63, :tUPLUS => 64, :tUMINUS => 65, :tUMINUS_NUM => 66, :tPOW => 67, :tCMP => 68, :tEQ => 69, :tEQQ => 70, :tNEQ => 71, :tGEQ => 72, :tLEQ => 73, :tANDOP => 74, :tOROP => 75, :tMATCH => 76, :tNMATCH => 77, :tDOT => 78, :tDOT2 => 79, :tDOT3 => 80, :tAREF => 81, :tASET => 82, :tLSHFT => 83, :tRSHFT => 84, :tCOLON2 => 85, :tCOLON3 => 86, :tOP_ASGN => 87, :tASSOC => 88, :tLPAREN => 89, :tLPAREN2 => 90, :tRPAREN => 91, :tLPAREN_ARG => 92, :tLBRACK => 93, :tLBRACK2 => 94, :tRBRACK => 95, :tLBRACE => 96, :tLBRACE_ARG => 97, :tSTAR => 98, :tSTAR2 => 99, :tAMPER => 100, :tAMPER2 => 101, :tTILDE => 102, :tPERCENT => 103, :tDIVIDE => 104, :tPLUS => 105, :tMINUS => 106, :tLT => 107, :tGT => 108, :tPIPE => 109, :tBANG => 110, :tCARET => 111, :tLCURLY => 112, :tRCURLY => 113, :tBACK_REF2 => 114, :tSYMBEG => 115, :tSTRING_BEG => 116, :tXSTRING_BEG => 117, :tREGEXP_BEG => 118, :tWORDS_BEG => 119, :tQWORDS_BEG => 120, :tSTRING_DBEG => 121, :tSTRING_DVAR => 122, :tSTRING_END => 123, :tSTRING => 124, :tSYMBOL => 125, :tNL => 126, :tEH => 127, :tCOLON => 128, :tCOMMA => 129, :tSPACE => 130, :tSEMI => 131, :tLAMBDA => 132, :tLAMBEG => 133, :tDSTAR => 134, :tCHAR => 135, :tSYMBOLS_BEG => 136, :tQSYMBOLS_BEG => 137, :tSTRING_DEND => 138, :tUBANG => 139, :tEQL => 140, :tLOWEST => 141 } racc_nt_base = 142 racc_use_result_var = true Racc_arg = [ racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var ] Racc_token_to_s_table = [ "$end", "error", "kCLASS", "kMODULE", "kDEF", "kUNDEF", "kBEGIN", "kRESCUE", "kENSURE", "kEND", "kIF", "kUNLESS", "kTHEN", "kELSIF", "kELSE", "kCASE", "kWHEN", "kWHILE", "kUNTIL", "kFOR", "kBREAK", "kNEXT", "kREDO", "kRETRY", "kIN", "kDO", "kDO_COND", "kDO_BLOCK", "kDO_LAMBDA", "kRETURN", "kYIELD", "kSUPER", "kSELF", "kNIL", "kTRUE", "kFALSE", "kAND", "kOR", "kNOT", "kIF_MOD", "kUNLESS_MOD", "kWHILE_MOD", "kUNTIL_MOD", "kRESCUE_MOD", "kALIAS", "kDEFINED", "klBEGIN", "klEND", "k__LINE__", "k__FILE__", "k__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tLABEL", "tCVAR", "tNTH_REF", "tBACK_REF", "tSTRING_CONTENT", "tINTEGER", "tFLOAT", "tREGEXP_END", "tUPLUS", "tUMINUS", "tUMINUS_NUM", "tPOW", "tCMP", "tEQ", "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", "tDOT", "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN2", "tRPAREN", "tLPAREN_ARG", "tLBRACK", "tLBRACK2", "tRBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tSTAR2", "tAMPER", "tAMPER2", "tTILDE", "tPERCENT", "tDIVIDE", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tDSTAR", "tCHAR", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DEND", "tUBANG", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "@1", "top_stmts", "opt_terms", "none", "top_stmt", "terms", "stmt", "bodystmt", "@2", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", "lhs", "mrhs", "arg_value", "expr", "@3", "opt_nl", "arg", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "fcall", "@4", "@5", "operation", "call_args", "mlhs_basic", "mlhs_inner", "rparen", "mlhs_head", "mlhs_item", "mlhs_node", "mlhs_post", "user_variable", "keyword_variable", "cname", "cpath", "fname", "op", "reswords", "fsym", "symbol", "dsym", "@6", "primary", "aref_args", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@7", "literal", "strings", "xstring", "regexp", "words", "qwords", "symbols", "qsymbols", "var_ref", "assoc_list", "brace_block", "method_call", "lambda", "then", "if_tail", "do", "case_body", "for_var", "superclass", "term", "f_arglist", "singleton", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23", "@24", "@25", "@26", "@27", "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "f_marg", "f_norm_arg", "f_margs", "f_marg_list", "block_args_tail", "f_block_kwarg", "f_kwrest", "opt_f_block_arg", "f_block_arg", "opt_block_args_tail", "block_param", "f_arg", "f_block_optarg", "f_rest_arg", "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "f_bad_arg", "f_larglist", "lambda_body", "@28", "f_args", "do_block", "@29", "@30", "operation3", "@31", "@32", "@33", "@34", "@35", "cases", "@36", "exc_list", "exc_var", "numeric", "string", "string1", "string_contents", "xstring_contents", "regexp_contents", "word_list", "word", "string_content", "symbol_list", "qword_list", "qsym_list", "string_dvar", "@37", "@38", "sym", "@39", "args_tail", "f_kwarg", "opt_args_tail", "f_optarg", "f_arg_item", "f_kw", "f_block_kw", "kwrest_mark", "f_opt", "f_block_opt", "restarg_mark", "blkarg_mark", "@40", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted def _reduce_1(val, _values, result) self.lexer.lex_state = :expr_beg result end def _reduce_2(val, _values, result) result = new_compstmt val result end def _reduce_3(val, _values, result) result = val[0] result end # reduce 4 omitted # reduce 5 omitted def _reduce_6(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = val[0] # TODO: remove once I have more confidence this is fixed # result.each_of_type :call_args do |s| # debug20 666, s, result # end result end def _reduce_9(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 1 yyerror "BEGIN in method" end self.env.extend result end def _reduce_10(val, _values, result) result = new_iter s(:preexe), nil, val[3] result end def _reduce_11(val, _values, result) result = new_body val result end def _reduce_12(val, _values, result) result = new_compstmt val result end # reduce 13 omitted # reduce 14 omitted def _reduce_15(val, _values, result) result = self.block_append val[0], val[2] result end def _reduce_16(val, _values, result) result = val[1] debug20 2, val, result result end def _reduce_17(val, _values, result) lexer.lex_state = :expr_fname result = self.lexer.lineno result end def _reduce_18(val, _values, result) result = s(:alias, val[1], val[3]).line(val[2]) result end def _reduce_19(val, _values, result) result = s(:valias, val[1].to_sym, val[2].to_sym) result end def _reduce_20(val, _values, result) result = s(:valias, val[1].to_sym, :"$#{val[2]}") result end def _reduce_21(val, _values, result) yyerror "can't make alias for the number variables" result end def _reduce_22(val, _values, result) result = val[1] result end def _reduce_23(val, _values, result) result = new_if val[2], val[0], nil result end def _reduce_24(val, _values, result) result = new_if val[2], nil, val[0] result end def _reduce_25(val, _values, result) result = new_while val[0], val[2], true result end def _reduce_26(val, _values, result) result = new_until val[0], val[2], true result end def _reduce_27(val, _values, result) result = s(:rescue, val[0], new_resbody(s(:array), val[2])) result end def _reduce_28(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] result end # reduce 29 omitted def _reduce_30(val, _values, result) result = new_masgn val[0], val[2], :wrap result end def _reduce_31(val, _values, result) result = new_op_asgn val result end def _reduce_32(val, _values, result) result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_33(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line result end def _reduce_34(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line result end def _reduce_35(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 4, val, result result end def _reduce_36(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 5, val, result result end def _reduce_37(val, _values, result) self.backref_assign_error val[0] result end def _reduce_38(val, _values, result) result = new_assign val[0], s(:svalue, val[2]) result end def _reduce_39(val, _values, result) result = new_masgn val[0], val[2], :wrap result end def _reduce_40(val, _values, result) result = new_masgn val[0], val[2] result end # reduce 41 omitted def _reduce_42(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_43(val, _values, result) result = new_assign val[0], val[2] result end # reduce 44 omitted def _reduce_45(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_46(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_47(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_48(val, _values, result) result = s(:call, val[1], :"!") result end # reduce 49 omitted def _reduce_50(val, _values, result) result = value_expr(val[0]) result end # reduce 51 omitted # reduce 52 omitted # reduce 53 omitted def _reduce_54(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_55(val, _values, result) self.env.extend(:dynamic) result = self.lexer.lineno result end def _reduce_56(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_57(val, _values, result) result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend result end def _reduce_58(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_59(val, _values, result) result = val[0].concat val[1].sexp_body # REFACTOR pattern result end def _reduce_60(val, _values, result) result = val[0].concat val[1].sexp_body if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end result end def _reduce_61(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_62(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] block_dup_check call, block block.insert 1, call result = block result end def _reduce_63(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_64(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block result end def _reduce_65(val, _values, result) result = new_super val[1] result end def _reduce_66(val, _values, result) result = new_yield val[1] result end def _reduce_67(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) result end def _reduce_68(val, _values, result) line = val[0].last result = s(:break, ret_args(val[1])).line(line) result end def _reduce_69(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) result end # reduce 70 omitted def _reduce_71(val, _values, result) result = val[1] result end # reduce 72 omitted def _reduce_73(val, _values, result) result = s(:masgn, s(:array, val[1])) result end def _reduce_74(val, _values, result) result = s(:masgn, val[0]) result end def _reduce_75(val, _values, result) result = s(:masgn, val[0] << val[1].compact) result end def _reduce_76(val, _values, result) result = s(:masgn, val[0] << s(:splat, val[2])) result end def _reduce_77(val, _values, result) ary1, _, splat, _, ary2 = val result = list_append ary1, s(:splat, splat) result.concat ary2.sexp_body result = s(:masgn, result) result end def _reduce_78(val, _values, result) result = s(:masgn, val[0] << s(:splat)) result end def _reduce_79(val, _values, result) ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_80(val, _values, result) result = s(:masgn, s(:array, s(:splat, val[1]))) result end def _reduce_81(val, _values, result) ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_82(val, _values, result) result = s(:masgn, s(:array, s(:splat))) result end def _reduce_83(val, _values, result) result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) result end # reduce 84 omitted def _reduce_85(val, _values, result) result = val[1] result end def _reduce_86(val, _values, result) result = s(:array, val[0]) result end def _reduce_87(val, _values, result) result = val[0] << val[1].compact result end def _reduce_88(val, _values, result) result = s(:array, val[0]) result end def _reduce_89(val, _values, result) result = list_append val[0], val[2] result end def _reduce_90(val, _values, result) result = self.assignable val[0] result end def _reduce_91(val, _values, result) result = self.assignable val[0] result end def _reduce_92(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_93(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_94(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_95(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_96(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) result end def _reduce_97(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) result end def _reduce_98(val, _values, result) self.backref_assign_error val[0] result end def _reduce_99(val, _values, result) result = self.assignable val[0] result end def _reduce_100(val, _values, result) result = self.assignable val[0] debug20 9, val, result result end def _reduce_101(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_102(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_103(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_104(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_105(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) result end def _reduce_106(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) result end def _reduce_107(val, _values, result) self.backref_assign_error val[0] result end def _reduce_108(val, _values, result) yyerror "class/module name must be CONSTANT" result end # reduce 109 omitted def _reduce_110(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_111(val, _values, result) result = val[0].to_sym result end def _reduce_112(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end # reduce 113 omitted # reduce 114 omitted # reduce 115 omitted def _reduce_116(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end def _reduce_117(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end # reduce 118 omitted # reduce 119 omitted def _reduce_120(val, _values, result) result = s(:lit, val[0].to_sym) result end # reduce 121 omitted def _reduce_122(val, _values, result) result = new_undef val[0] result end def _reduce_123(val, _values, result) lexer.lex_state = :expr_fname result end def _reduce_124(val, _values, result) result = new_undef val[0], val[3] result end # reduce 125 omitted # reduce 126 omitted # reduce 127 omitted # reduce 128 omitted # reduce 129 omitted # reduce 130 omitted # reduce 131 omitted # reduce 132 omitted # reduce 133 omitted # reduce 134 omitted # reduce 135 omitted # reduce 136 omitted # reduce 137 omitted # reduce 138 omitted # reduce 139 omitted # reduce 140 omitted # reduce 141 omitted # reduce 142 omitted # reduce 143 omitted # reduce 144 omitted # reduce 145 omitted # reduce 146 omitted # reduce 147 omitted # reduce 148 omitted # reduce 149 omitted # reduce 150 omitted # reduce 151 omitted # reduce 152 omitted # reduce 153 omitted # reduce 154 omitted # reduce 155 omitted # reduce 156 omitted # reduce 157 omitted # reduce 158 omitted # reduce 159 omitted # reduce 160 omitted # reduce 161 omitted # reduce 162 omitted # reduce 163 omitted # reduce 164 omitted # reduce 165 omitted # reduce 166 omitted # reduce 167 omitted # reduce 168 omitted # reduce 169 omitted # reduce 170 omitted # reduce 171 omitted # reduce 172 omitted # reduce 173 omitted # reduce 174 omitted # reduce 175 omitted # reduce 176 omitted # reduce 177 omitted # reduce 178 omitted # reduce 179 omitted # reduce 180 omitted # reduce 181 omitted # reduce 182 omitted # reduce 183 omitted # reduce 184 omitted # reduce 185 omitted # reduce 186 omitted # reduce 187 omitted # reduce 188 omitted # reduce 189 omitted # reduce 190 omitted # reduce 191 omitted # reduce 192 omitted # reduce 193 omitted # reduce 194 omitted # reduce 195 omitted # reduce 196 omitted def _reduce_197(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_198(val, _values, result) result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) result end def _reduce_199(val, _values, result) result = new_op_asgn val result end def _reduce_200(val, _values, result) result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) result end def _reduce_201(val, _values, result) val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_202(val, _values, result) result = new_op_asgn2 val result end def _reduce_203(val, _values, result) result = new_op_asgn2 val result end def _reduce_204(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) result end def _reduce_205(val, _values, result) yyerror "constant re-assignment" result end def _reduce_206(val, _values, result) yyerror "constant re-assignment" result end def _reduce_207(val, _values, result) self.backref_assign_error val[0] result end def _reduce_208(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end result end def _reduce_209(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end result end def _reduce_210(val, _values, result) result = new_call val[0], :+, argl(val[2]) result end def _reduce_211(val, _values, result) result = new_call val[0], :-, argl(val[2]) result end def _reduce_212(val, _values, result) result = new_call val[0], :*, argl(val[2]) result end def _reduce_213(val, _values, result) result = new_call val[0], :"/", argl(val[2]) result end def _reduce_214(val, _values, result) result = new_call val[0], :"%", argl(val[2]) result end def _reduce_215(val, _values, result) result = new_call val[0], :**, argl(val[2]) result end def _reduce_216(val, _values, result) result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") result end def _reduce_217(val, _values, result) result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") ## TODO: why is this 2.0 only? debug20 12, val, result result end def _reduce_218(val, _values, result) result = new_call val[1], :"+@" result end def _reduce_219(val, _values, result) result = new_call val[1], :"-@" result end def _reduce_220(val, _values, result) result = new_call val[0], :"|", argl(val[2]) result end def _reduce_221(val, _values, result) result = new_call val[0], :"^", argl(val[2]) result end def _reduce_222(val, _values, result) result = new_call val[0], :"&", argl(val[2]) result end def _reduce_223(val, _values, result) result = new_call val[0], :"<=>", argl(val[2]) result end def _reduce_224(val, _values, result) result = new_call val[0], :">", argl(val[2]) result end def _reduce_225(val, _values, result) result = new_call val[0], :">=", argl(val[2]) result end def _reduce_226(val, _values, result) result = new_call val[0], :"<", argl(val[2]) result end def _reduce_227(val, _values, result) result = new_call val[0], :"<=", argl(val[2]) result end def _reduce_228(val, _values, result) result = new_call val[0], :"==", argl(val[2]) result end def _reduce_229(val, _values, result) result = new_call val[0], :"===", argl(val[2]) result end def _reduce_230(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) result end def _reduce_231(val, _values, result) result = new_match val[0], val[2] result end def _reduce_232(val, _values, result) result = s(:not, new_match(val[0], val[2])) result end def _reduce_233(val, _values, result) result = new_call val[1], :"!" result end def _reduce_234(val, _values, result) result = new_call value_expr(val[1]), :"~" result end def _reduce_235(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) result end def _reduce_236(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) result end def _reduce_237(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_238(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_239(val, _values, result) result = s(:defined, val[2]) result end def _reduce_240(val, _values, result) result = s(:if, val[0], val[2], val[5]) result end # reduce 241 omitted def _reduce_242(val, _values, result) result = value_expr(val[0]) result end # reduce 243 omitted def _reduce_244(val, _values, result) result = args [val[0]] result end def _reduce_245(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_246(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_247(val, _values, result) result = val[1] result end # reduce 248 omitted # reduce 249 omitted def _reduce_250(val, _values, result) result = val[0] result end def _reduce_251(val, _values, result) result = val[0] result end def _reduce_252(val, _values, result) result = args val result end def _reduce_253(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_254(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_255(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val result end def _reduce_256(val, _values, result) result = call_args val result = self.arg_blk_pass val[0], val[1] result end def _reduce_257(val, _values, result) result = call_args [array_to_hash(val[0])] result = self.arg_blk_pass result, val[1] result end def _reduce_258(val, _values, result) result = call_args [val[0], array_to_hash(val[2])] result = self.arg_blk_pass result, val[3] result end def _reduce_259(val, _values, result) result = call_args val result end def _reduce_260(val, _values, result) result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true result end def _reduce_261(val, _values, result) lexer.cmdarg.stack.replace val[0] result = val[1] result end def _reduce_262(val, _values, result) result = s(:block_pass, val[1]) result end def _reduce_263(val, _values, result) result = val[1] result end # reduce 264 omitted def _reduce_265(val, _values, result) result = s(:array, val[0]) result end def _reduce_266(val, _values, result) result = s(:array, s(:splat, val[1])) result end def _reduce_267(val, _values, result) result = self.list_append val[0], val[2] result end def _reduce_268(val, _values, result) result = self.list_append val[0], s(:splat, val[3]) result end def _reduce_269(val, _values, result) result = val[0] << val[2] result end def _reduce_270(val, _values, result) result = self.arg_concat val[0], val[3] result end def _reduce_271(val, _values, result) result = s(:splat, val[1]) result end # reduce 272 omitted # reduce 273 omitted # reduce 274 omitted # reduce 275 omitted # reduce 276 omitted # reduce 277 omitted # reduce 278 omitted # reduce 279 omitted # reduce 280 omitted # reduce 281 omitted def _reduce_282(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_283(val, _values, result) result = self.lexer.lineno result end def _reduce_284(val, _values, result) unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] result end def _reduce_285(val, _values, result) debug20 13, val, result result end def _reduce_286(val, _values, result) result = self.lexer.cmdarg.stack.dup lexer.cmdarg.stack.replace [false] # TODO add api for these result end def _reduce_287(val, _values, result) lexer.lex_state = :expr_endarg result end def _reduce_288(val, _values, result) warning "(...) interpreted as grouped expression" lexer.cmdarg.stack.replace val[1] result = val[2] result end def _reduce_289(val, _values, result) result = val[1] || s(:nil) result.paren = true result end def _reduce_290(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end def _reduce_291(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_292(val, _values, result) result = val[1] || s(:array) result.sexp_type = :array # aref_args is :args result end def _reduce_293(val, _values, result) result = self.lexer.lineno result end def _reduce_294(val, _values, result) result = new_hash val result end def _reduce_295(val, _values, result) result = s(:return) result end def _reduce_296(val, _values, result) result = new_yield val[2] result end def _reduce_297(val, _values, result) result = new_yield result end def _reduce_298(val, _values, result) result = new_yield result end def _reduce_299(val, _values, result) result = s(:defined, val[3]) result end def _reduce_300(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_301(val, _values, result) debug20 14, val, result result end def _reduce_302(val, _values, result) oper, iter = val[0], val[1] call = oper # FIX iter.insert 1, call result = iter call.line = iter.line result end # reduce 303 omitted def _reduce_304(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter result end def _reduce_305(val, _values, result) result = val[1] # TODO: fix lineno result end def _reduce_306(val, _values, result) result = new_if val[1], val[3], val[4] result end def _reduce_307(val, _values, result) result = new_if val[1], val[4], val[3] result end def _reduce_308(val, _values, result) lexer.cond.push true result end def _reduce_309(val, _values, result) lexer.cond.pop result end def _reduce_310(val, _values, result) result = new_while val[5], val[2], true result end def _reduce_311(val, _values, result) lexer.cond.push true result end def _reduce_312(val, _values, result) lexer.cond.pop result end def _reduce_313(val, _values, result) result = new_until val[5], val[2], true result end def _reduce_314(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_315(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_316(val, _values, result) lexer.cond.push true result end def _reduce_317(val, _values, result) lexer.cond.pop result end def _reduce_318(val, _values, result) result = new_for val[4], val[1], val[7] result end def _reduce_319(val, _values, result) result = self.lexer.lineno result end def _reduce_320(val, _values, result) self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend result end def _reduce_321(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_322(val, _values, result) result = self.lexer.lineno result end def _reduce_323(val, _values, result) result = self.in_def self.in_def = false result end def _reduce_324(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend result end def _reduce_325(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_326(val, _values, result) result = self.lexer.lineno result end def _reduce_327(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend result end def _reduce_328(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_329(val, _values, result) result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend # TODO: local->cmdargs = cmdarg_stack; # TODO: port local_push_gen and local_pop_gen lexer.cmdarg.stack.replace [false] result end def _reduce_330(val, _values, result) in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body result end def _reduce_331(val, _values, result) self.comments.push self.lexer.comments lexer.lex_state = :expr_fname result end def _reduce_332(val, _values, result) self.in_single += 1 self.env.extend lexer.lex_state = :expr_endfn # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] result end def _reduce_333(val, _values, result) line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body result end def _reduce_334(val, _values, result) result = s(:break) result end def _reduce_335(val, _values, result) result = s(:next) result end def _reduce_336(val, _values, result) result = s(:redo) result end def _reduce_337(val, _values, result) result = s(:retry) result end def _reduce_338(val, _values, result) result = value_expr(val[0]) result end # reduce 339 omitted # reduce 340 omitted # reduce 341 omitted # reduce 342 omitted # reduce 343 omitted # reduce 344 omitted # reduce 345 omitted # reduce 346 omitted # reduce 347 omitted # reduce 348 omitted # reduce 349 omitted # reduce 350 omitted # reduce 351 omitted # reduce 352 omitted # reduce 353 omitted # reduce 354 omitted # reduce 355 omitted def _reduce_356(val, _values, result) result = s(:if, val[1], val[3], val[4]) result end # reduce 357 omitted def _reduce_358(val, _values, result) result = val[1] result end # reduce 359 omitted def _reduce_360(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end # reduce 361 omitted def _reduce_362(val, _values, result) result = val[1] result end def _reduce_363(val, _values, result) result = s(:array, val[0]) result end def _reduce_364(val, _values, result) result = list_append val[0], val[2] result end def _reduce_365(val, _values, result) args, = val result = block_var args result end def _reduce_366(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym result end def _reduce_367(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 result end def _reduce_368(val, _values, result) args, _, _ = val result = block_var args, :* result end def _reduce_369(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 result end def _reduce_370(val, _values, result) _, splat = val result = block_var :"*#{splat}" result end def _reduce_371(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args result end def _reduce_372(val, _values, result) result = block_var :* result end def _reduce_373(val, _values, result) _, _, args = val result = block_var :*, args result end def _reduce_374(val, _values, result) result = call_args val result end def _reduce_375(val, _values, result) result = call_args val result end def _reduce_376(val, _values, result) result = call_args val result end def _reduce_377(val, _values, result) result = call_args val result end def _reduce_378(val, _values, result) result = args val result end # reduce 379 omitted def _reduce_380(val, _values, result) result = args val result end def _reduce_381(val, _values, result) result = args val result end def _reduce_382(val, _values, result) result = args val result end def _reduce_383(val, _values, result) result = args val result end def _reduce_384(val, _values, result) result = args val result end def _reduce_385(val, _values, result) result = args val result end def _reduce_386(val, _values, result) result = args val result end def _reduce_387(val, _values, result) result = args val result end def _reduce_388(val, _values, result) result = args val result end def _reduce_389(val, _values, result) result = args val result end def _reduce_390(val, _values, result) result = args val result end def _reduce_391(val, _values, result) result = args val result end def _reduce_392(val, _values, result) result = args val result end def _reduce_393(val, _values, result) result = args val result end def _reduce_394(val, _values, result) result = args val result end def _reduce_395(val, _values, result) result = 0 result end # reduce 396 omitted def _reduce_397(val, _values, result) result = args val result end def _reduce_398(val, _values, result) self.lexer.command_start = true result = s(:args) result end def _reduce_399(val, _values, result) result = args val result end # reduce 400 omitted def _reduce_401(val, _values, result) result = args val result end def _reduce_402(val, _values, result) result = args val result end def _reduce_403(val, _values, result) result = args val result end def _reduce_404(val, _values, result) result = s(:shadow, val[0].to_sym) result end # reduce 405 omitted def _reduce_406(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest result end def _reduce_407(val, _values, result) lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body self.env.unextend result end def _reduce_408(val, _values, result) result = args val result end def _reduce_409(val, _values, result) result = val[0] result = 0 if result == s(:args) result end def _reduce_410(val, _values, result) result = val[1] result end def _reduce_411(val, _values, result) result = val[1] result end def _reduce_412(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_413(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_414(val, _values, result) args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend result end def _reduce_415(val, _values, result) # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] result end def _reduce_416(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_417(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 result end def _reduce_418(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 result end def _reduce_419(val, _values, result) result = self.lexer.lineno result end def _reduce_420(val, _values, result) args = self.call_args val[2..-1] result = val[0].concat args.sexp_body result end def _reduce_421(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_422(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_423(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_424(val, _values, result) result = new_call val[0], :call, val[2], val[1] result end def _reduce_425(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_426(val, _values, result) result = new_super val[1] result end def _reduce_427(val, _values, result) result = s(:zsuper) result end def _reduce_428(val, _values, result) result = new_aref val result end def _reduce_429(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_430(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_431(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_432(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_433(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_434(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_435(val, _values, result) result = self.lexer.lineno result end def _reduce_436(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] result end # reduce 437 omitted # reduce 438 omitted def _reduce_439(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above result end def _reduce_440(val, _values, result) result = nil result end def _reduce_441(val, _values, result) result = s(:array, val[0]) result end # reduce 442 omitted # reduce 443 omitted def _reduce_444(val, _values, result) result = val[1] result end # reduce 445 omitted def _reduce_446(val, _values, result) _, body = val result = body || s(:nil) result end # reduce 447 omitted def _reduce_448(val, _values, result) result = s(:lit, val[0]) result end def _reduce_449(val, _values, result) result = s(:lit, val[0]) result end # reduce 450 omitted def _reduce_451(val, _values, result) val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] result end def _reduce_452(val, _values, result) debug20 23, val, result result end # reduce 453 omitted def _reduce_454(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_455(val, _values, result) result = val[1] result end def _reduce_456(val, _values, result) result = new_string val result end def _reduce_457(val, _values, result) result = new_xstring val[1] result end def _reduce_458(val, _values, result) result = new_regexp val result end def _reduce_459(val, _values, result) result = s(:array) result end def _reduce_460(val, _values, result) result = val[1] result end def _reduce_461(val, _values, result) result = new_word_list result end def _reduce_462(val, _values, result) result = val[0].dup << new_word_list_entry(val) result end # reduce 463 omitted def _reduce_464(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_465(val, _values, result) result = s(:array) result end def _reduce_466(val, _values, result) result = val[1] result end def _reduce_467(val, _values, result) result = new_symbol_list result end def _reduce_468(val, _values, result) result = val[0].dup << new_symbol_list_entry(val) result end def _reduce_469(val, _values, result) result = s(:array) result end def _reduce_470(val, _values, result) result = val[1] result end def _reduce_471(val, _values, result) result = s(:array) result end def _reduce_472(val, _values, result) result = val[1] result end def _reduce_473(val, _values, result) result = new_qword_list result end def _reduce_474(val, _values, result) result = val[0].dup << new_qword_list_entry(val) result end def _reduce_475(val, _values, result) result = new_qsym_list result end def _reduce_476(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) result end def _reduce_477(val, _values, result) result = s(:str, "") result end def _reduce_478(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_479(val, _values, result) result = nil result end def _reduce_480(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_481(val, _values, result) result = nil result end def _reduce_482(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_483(val, _values, result) result = new_string val result end def _reduce_484(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg # TODO: expr_value ? result end def _reduce_485(val, _values, result) lexer.lex_strterm = val[1] result = s(:evstr, val[2]) result end def _reduce_486(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store, lexer.lex_state, ] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_value result end def _reduce_487(val, _values, result) # TODO: tRCURLY -> tSTRING_DEND _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg lexer.lex_state = oldlex_state case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else debug20 25 raise "unknown string body: #{stmt.inspect}" end result end def _reduce_488(val, _values, result) result = s(:gvar, val[0].to_sym) result end def _reduce_489(val, _values, result) result = s(:ivar, val[0].to_sym) result end def _reduce_490(val, _values, result) result = s(:cvar, val[0].to_sym) result end # reduce 491 omitted def _reduce_492(val, _values, result) lexer.lex_state = :expr_end result = val[1].to_sym result end def _reduce_493(val, _values, result) result = val[0].to_sym result end # reduce 494 omitted # reduce 495 omitted # reduce 496 omitted # reduce 497 omitted def _reduce_498(val, _values, result) lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) when :evstr then result = s(:dsym, "", result) else debug20 26, val, result end result end # reduce 499 omitted # reduce 500 omitted def _reduce_501(val, _values, result) result = -val[1] # TODO: pt_testcase result end def _reduce_502(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 503 omitted # reduce 504 omitted # reduce 505 omitted # reduce 506 omitted # reduce 507 omitted def _reduce_508(val, _values, result) result = s(:nil) result end def _reduce_509(val, _values, result) result = s(:self) result end def _reduce_510(val, _values, result) result = s(:true) result end def _reduce_511(val, _values, result) result = s(:false) result end def _reduce_512(val, _values, result) result = s(:str, self.file) result end def _reduce_513(val, _values, result) result = s(:lit, lexer.lineno) result end def _reduce_514(val, _values, result) result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end result end def _reduce_515(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_516(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_517(val, _values, result) result = self.assignable val[0] result end def _reduce_518(val, _values, result) result = self.assignable val[0] debug20 29, val, result result end def _reduce_519(val, _values, result) result = s(:nth_ref, val[0]) result end def _reduce_520(val, _values, result) result = s(:back_ref, val[0]) result end def _reduce_521(val, _values, result) result = nil result end def _reduce_522(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_523(val, _values, result) result = val[2] result end def _reduce_524(val, _values, result) yyerrok result = nil debug20 30, val, result result end def _reduce_525(val, _values, result) result = val[1] self.lexer.lex_state = :expr_beg self.lexer.command_start = true # TODO: # $$ = parser->parser_in_kwarg; # parser->parser_in_kwarg = 1; result end def _reduce_526(val, _values, result) # TODO: parser->parser_in_kwarg = $1; result = val[0] self.lexer.lex_state = :expr_beg self.lexer.command_start = true result end def _reduce_527(val, _values, result) result = args val result end def _reduce_528(val, _values, result) result = args val result end def _reduce_529(val, _values, result) result = args val result end # reduce 530 omitted def _reduce_531(val, _values, result) result = val[1] result end def _reduce_532(val, _values, result) result = nil result end def _reduce_533(val, _values, result) result = args val result end def _reduce_534(val, _values, result) result = args val result end def _reduce_535(val, _values, result) result = args val result end def _reduce_536(val, _values, result) result = args val result end def _reduce_537(val, _values, result) result = args val result end def _reduce_538(val, _values, result) result = args val result end def _reduce_539(val, _values, result) result = args val result end def _reduce_540(val, _values, result) result = args val result end def _reduce_541(val, _values, result) result = args val result end def _reduce_542(val, _values, result) result = args val result end def _reduce_543(val, _values, result) result = args val result end def _reduce_544(val, _values, result) result = args val result end def _reduce_545(val, _values, result) result = args val result end def _reduce_546(val, _values, result) result = args val result end def _reduce_547(val, _values, result) result = args val result end def _reduce_548(val, _values, result) yyerror "formal argument cannot be a constant" result end def _reduce_549(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_550(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_551(val, _values, result) yyerror "formal argument cannot be a class variable" result end # reduce 552 omitted def _reduce_553(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier result end # reduce 554 omitted def _reduce_555(val, _values, result) result = val[1] result end def _reduce_556(val, _values, result) case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end result end def _reduce_557(val, _values, result) list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item result end def _reduce_558(val, _values, result) # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) result end def _reduce_559(val, _values, result) # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) result end # reduce 560 omitted def _reduce_561(val, _values, result) list, _, item = val result = list << item.last result end # reduce 562 omitted def _reduce_563(val, _values, result) result = args val result end # reduce 564 omitted # reduce 565 omitted def _reduce_566(val, _values, result) result = :"**#{val[1]}" result end def _reduce_567(val, _values, result) result = :"**" result end def _reduce_568(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_569(val, _values, result) result = self.assignable val[0], val[2] result end def _reduce_570(val, _values, result) result = s(:block, val[0]) result end def _reduce_571(val, _values, result) result = val[0] result << val[2] result end def _reduce_572(val, _values, result) result = s(:block, val[0]) result end def _reduce_573(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 574 omitted # reduce 575 omitted def _reduce_576(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" result end def _reduce_577(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 578 omitted # reduce 579 omitted def _reduce_580(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym result end def _reduce_581(val, _values, result) result = val[1] result end def _reduce_582(val, _values, result) result = nil result end # reduce 583 omitted def _reduce_584(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_585(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit result end def _reduce_586(val, _values, result) result = s(:array) result end def _reduce_587(val, _values, result) result = val[0] result end # reduce 588 omitted def _reduce_589(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash result end def _reduce_590(val, _values, result) result = s(:array, val[0], val[2]) result end def _reduce_591(val, _values, result) result = s(:array, s(:lit, val[0][0].to_sym), val.last) result end def _reduce_592(val, _values, result) result = s(:array, s(:kwsplat, val[1])) result end # reduce 593 omitted # reduce 594 omitted # reduce 595 omitted # reduce 596 omitted # reduce 597 omitted # reduce 598 omitted # reduce 599 omitted # reduce 600 omitted # reduce 601 omitted # reduce 602 omitted # reduce 603 omitted # reduce 604 omitted # reduce 605 omitted # reduce 606 omitted # reduce 607 omitted # reduce 608 omitted # reduce 609 omitted # reduce 610 omitted # reduce 611 omitted # reduce 612 omitted # reduce 613 omitted # reduce 614 omitted def _reduce_615(val, _values, result) yyerrok result end # reduce 616 omitted # reduce 617 omitted def _reduce_618(val, _values, result) yyerrok result end def _reduce_619(val, _values, result) result = nil; result end def _reduce_none(val, _values, result) val[0] end end # class Ruby20Parser ruby_parser-3.11.0/lib/rp_extensions.rb0000444000004100000410000000300213277753330020157 0ustar www-datawww-data# :stopdoc: # WHY do I have to do this?!? class Regexp ONCE = 0 unless defined? ONCE # FIX: remove this - it makes no sense unless defined? ENC_NONE then ENC_NONE = /x/n.options ENC_EUC = /x/e.options ENC_SJIS = /x/s.options ENC_UTF8 = /x/u.options end end # I hate ruby 1.9 string changes class Fixnum def ord self end end unless "a"[0] == "a" # :startdoc: ############################################################ # HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK HACK unless "".respond_to?(:grep) then class String def grep re lines.grep re end end end class String ## # This is a hack used by the lexer to sneak in line numbers at the # identifier level. This should be MUCH smaller than making # process_token return [value, lineno] and modifying EVERYTHING that # reduces tIDENTIFIER. attr_accessor :lineno def clean_caller self.sub(File.dirname(__FILE__), ".").sub(/:in.*/, "") end if $DEBUG end require "sexp" class Sexp attr_writer :paren def paren @paren ||= false end def value raise "multi item sexp" if size > 2 last end def to_sym raise "no: #{self.inspect}.to_sym is a bug" self.value.to_sym end alias :add :<< def add_all x self.concat x.sexp_body end def block_pass? any? { |s| Sexp === s && s.sexp_type == :block_pass } end alias :node_type :sexp_type alias :values :sexp_body # TODO: retire end # END HACK ############################################################ ruby_parser-3.11.0/lib/ruby18_parser.rb0000644000004100000410000067324513277753330020015 0ustar www-datawww-data# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.14 # from Racc grammer file "". # require 'racc/parser.rb' class Ruby18Parser < RubyParser::Parser require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ##### State transition tables begin ### clist = [ '-281,494,198,199,683,198,199,-281,-281,-281,261,-83,218,-281,-281,648', '-281,-89,-84,-85,-88,436,535,-64,639,-79,564,-90,640,564,-444,261,494', '494,-86,-281,-281,-444,-281,-281,-281,-281,-281,494,215,-87,-76,593', '217,216,-84,261,564,469,594,574,627,494,725,98,563,-72,710,563,-281', '-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,-281,627', '627,-281,-281,-281,-501,554,534,563,102,-281,-79,294,-281,101,-366,260', '294,-281,-500,-281,-89,-281,-281,-281,-281,-281,-281,-281,-79,-281,593', '-281,190,102,-75,493,260,594,101,647,-81,-76,-77,-80,-281,-281,-504', '-80,-79,-281,-82,-88,-79,-504,-504,-504,260,-78,102,-504,-504,-77,-504', '101,102,102,493,493,-79,101,101,-504,218,564,102,102,626,493,294,101', '101,-504,-504,191,-504,-504,-504,-504,-504,102,693,493,75,192,101,694', '102,102,626,626,76,101,101,523,215,669,668,563,217,216,-504,-504,-504', '-504,-504,-504,-504,-504,-504,-504,-504,-504,-504,-504,193,-77,-504', '-504,-504,523,551,-451,523,237,-504,528,-85,-504,-498,-504,545,-87,-504', '-77,-504,285,-504,-504,-504,-504,-504,-504,-504,523,-504,-504,-504,523', '728,286,501,254,399,-77,525,524,523,-77,255,-504,-504,-275,-78,675,-504', '546,-86,-83,-275,-275,-275,294,-77,-275,-275,-275,-85,-275,-442,-504', '525,524,536,525,524,-442,-504,-275,-275,482,-498,-500,617,780,-442,-504', '-275,-275,-90,-275,-275,-275,-275,-275,525,524,530,-79,525,524,521,-87', '-498,-504,-448,-447,-445,525,524,526,321,-448,-447,-445,342,-275,-275', '-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,-275,-84,-439', '-275,-275,-275,-501,482,-275,-439,481,-275,-500,-442,-275,-275,345,-275', '834,-275,-442,-275,365,-275,-275,-275,-275,-275,-275,-275,-449,-275', '-504,-275,-283,518,-446,-449,-497,102,366,-283,519,-446,101,-520,-275', '-275,-275,-275,-283,-275,-520,-520,-520,-504,-501,-520,-520,-520,834', '-520,-500,-501,666,665,669,668,-501,-500,102,-520,-501,197,-500,101', '482,398,-500,484,-520,-520,-504,-520,-520,-520,-520,-520,-439,-504,-501', '500,-451,501,-500,-439,-500,362,-504,469,-497,364,363,400,-439,-504', '666,665,669,668,198,199,-504,102,218,-82,-504,-500,101,-90,-520,-504', '-497,482,102,401,484,-520,-274,101,232,233,263,-520,-75,-274,430,102', '-83,-504,433,-81,101,436,-274,-89,215,441,221,263,217,216,213,214,662', '-520,660,659,658,661,198,199,-63,-501,-501,-501,457,-501,-520,458,-520', '-501,-501,-520,198,199,-501,459,-501,-501,-501,-501,-501,-501,-501,737', '728,198,199,-501,-501,-501,-501,-501,-501,-501,737,728,287,288,666,665', '669,668,465,-501,467,468,-501,-501,-501,-501,-501,-501,-501,-501,-501', '-501,266,-501,-501,294,-501,-501,-501,218,-521,-521,-521,-521,224,226', '263,463,-521,-521,-282,470,471,-450,464,232,233,-282,-501,554,-450,-501', '-501,462,-501,-501,-282,218,-501,-450,-501,215,-501,221,-501,217,216', '213,214,225,223,219,-501,220,294,486,-520,-501,-501,-501,-501,-501,-501', '-520,-520,-520,-501,-501,-520,-520,-520,-281,-520,218,355,-88,505,-450', '-281,506,529,533,-520,-501,-450,540,542,-281,-262,232,233,-520,-520', '-450,-520,-520,-520,-520,-520,544,263,844,218,600,383,215,-274,601,845', '217,216,213,214,-274,218,142,143,843,140,124,125,126,-274,129,131,218', '218,127,574,472,-282,-520,144,145,132,133,473,-282,-520,590,294,595', '237,263,-520,397,-282,596,597,137,136,-72,123,141,139,138,134,135,130', '128,121,395,122,598,-282,146,-520,475,396,611,612,-282,294,619,-500', '-500,-500,397,-500,-520,-282,-520,-500,-500,-520,622,501,-500,630,-500', '-500,-500,-500,-500,-500,-500,677,679,441,441,-500,-500,-500,-500,-500', '-500,-500,696,707,772,773,218,774,96,97,436,-500,436,246,-500,-500,-500', '-500,-500,-500,-500,-500,-500,-500,712,-500,-500,714,-500,-500,-500', '218,-521,-521,-521,-521,224,226,215,-283,-521,-521,217,216,213,214,-283', '232,233,718,-500,695,719,-500,-500,-283,-500,-500,724,263,-500,263,-500', '215,-500,221,-500,217,216,213,214,225,223,219,-500,220,218,218,728,-500', '-500,-500,-500,-500,-500,733,195,728,-500,-500,65,66,67,196,54,741,742', '-86,59,60,746,760,194,63,762,61,62,64,26,27,68,69,765,766,767,768,25', '31,30,91,90,92,93,-263,781,20,789,574,574,574,541,801,44,263,263,95', '94,85,53,87,86,88,89,96,97,237,83,84,806,41,42,40,218,222,227,228,229', '224,226,234,235,230,231,-281,211,212,644,-262,232,233,-281,203,810,642', '207,-501,813,55,56,-281,815,57,643,818,215,822,221,43,217,216,213,214', '225,223,219,21,220,826,827,294,81,75,77,78,79,80,838,839,846,76,82,102', '236,847,-218,-281,101,65,66,67,10,54,-281,848,849,59,60,-501,853,856', '63,-281,61,62,64,26,27,68,69,858,859,860,865,25,31,30,91,90,92,93,866', '870,20,873,218,874,765,765,9,44,11,12,95,94,85,53,87,86,88,89,96,97', '766,83,84,887,41,42,40,218,222,227,228,229,224,226,215,503,230,231,217', '216,213,214,504,232,233,890,39,574,574,33,906,502,55,56,907,908,57,912', '35,215,611,221,43,217,216,213,214,225,223,219,21,220,916,917,765,81', '75,77,78,79,80,919,-328,920,76,82,65,66,67,-328,54,355,574,574,59,60', '3,,-328,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,104,105', '106,107,108,,,,,279,,,95,94,85,53,87,86,88,89,96,97,,83,84,,,662,283', '660,659,658,661,104,105,106,107,108,104,105,106,107,108,,,,,,784,,,207', ',,55,56,,,57,,,,,,662,652,660,659,658,661,,,,666,665,669,668,81,75,77', '78,79,80,,,,76,82,65,66,67,787,54,,,,59,60,,,,63,652,61,62,64,249,250', '68,69,666,665,669,668,248,278,282,91,90,92,93,,,,,,,,541,,279,,,95,94', '85,53,87,86,88,89,96,97,,83,84,,,,283,218,222,227,228,229,224,226,234', '235,230,231,,211,212,,,232,233,,784,,,207,,,55,56,,,57,,,215,,221,,217', '216,213,214,225,223,219,,220,,,,81,75,77,78,79,80,,,,76,82,,236,,881', '8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91', '90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,', '41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,662,,660', '659,658,661,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59', '60,,,,63,,61,62,64,26,27,68,69,666,665,669,668,25,31,30,91,90,92,93', ',,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', '218,222,227,228,229,224,226,234,235,230,231,,-521,-521,,,232,233,,39', ',,33,,,55,56,,,57,,35,215,,221,43,217,216,213,214,225,223,219,21,220', ',,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62', '64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85', '53,87,86,88,89,96,97,,83,84,,41,42,40,218,,,,,,,,,,,,,,,,232,233,,39', ',,33,,,55,56,,,57,,35,215,,221,43,217,216,213,214,,,219,21,220,,,,81', '75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26', '27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87', '86,88,89,96,97,,83,84,,41,42,40,218,,,,,,,,,,,,,,,,232,233,,39,,,33', ',,55,56,,,57,,35,215,,221,43,217,216,213,214,,,219,21,220,,,,81,75,77', '78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68', '69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88', '89,96,97,,83,84,,41,42,40,218,222,227,228,229,224,226,234,235,230,231', ',-521,-521,,,232,233,,39,,,33,,,55,56,,,57,,35,215,,221,43,217,216,213', '214,225,223,219,21,220,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54', ',,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,', ',,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,218,-521', '-521,-521,-521,224,226,,,-521,-521,,,,,,232,233,,39,,,33,,,55,56,,,57', ',35,215,,221,43,217,216,213,214,225,223,219,21,220,,,,81,75,77,78,79', '80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,', ',,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89', '96,97,,83,84,,41,42,40,218,-521,-521,-521,-521,224,226,,,-521,-521,', ',,,,232,233,,39,,,33,,,55,56,,,57,,35,215,,221,43,217,216,213,214,225', '223,219,21,220,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59', '60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9', '44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,218,,,,,,,,', ',,,,,,,232,233,,39,,,33,,,55,56,,,57,,35,215,,221,43,217,216,213,214', ',,219,21,220,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60', ',,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44', '11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,218,,,,,,,,,,,', ',,,,232,233,,39,,,33,,,55,56,,,57,,35,215,,221,43,217,216,213,214,,', '219,21,220,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,', ',,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11', '12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,218,-521,-521,-521', '-521,224,226,,,-521,-521,,,,,,232,233,,39,,,33,,,55,56,,,57,,35,215', ',221,43,217,216,213,214,225,223,219,21,220,,,,81,75,77,78,79,80,,,,76', '82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30', '91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84', ',41,42,40,218,-521,-521,-521,-521,224,226,,,-521,-521,,,,,,232,233,', '39,,,33,,,55,56,,,57,,35,215,,221,43,217,216,213,214,225,223,219,21', '220,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61', '62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94', '85,53,87,86,88,89,96,97,,83,84,,41,42,40,218,222,227,228,229,224,226', '234,,230,231,,,,,,232,233,,39,,,33,,,55,56,,,57,,35,215,,221,43,217', '216,213,214,225,223,219,21,220,,,,81,75,77,78,79,80,,,,76,82,8,65,66', '67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92', '93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,218,,,,,,,,,,,,,,,,232,233,,39,,,268,,,55,56,,,57,,35,215,,221,43', '217,216,213,214,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54', ',,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,', ',,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,', ',,,,,,,,,,,,,39,,,268,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77', '78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68', '69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88', '89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35', ',,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59', '60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9', '44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,', ',,,,,,,39,,,268,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79', '80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,', ',,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89', '96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,', ',,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59', '60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9', '44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,', ',,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80', ',,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25', '31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97', ',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,', ',,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,', ',63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11', '12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,', ',39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', '82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30', '91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84', ',41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21', ',,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62', '64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85', '53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55', '56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67', '10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93', ',,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', ',,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75', '77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27', '68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86', '88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57', ',35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54', ',,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,', ',,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,', ',,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78', '79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69', ',,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89', '96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,', ',,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59', '60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9', '44,11,12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,', ',,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80', ',,,76,82,8,65,66,67,10,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25', '31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53,87,86,88,89,96,97', ',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56,,,57,,35,,,,43,', ',,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,8,65,66,67,10,54,,,,59,60,,', ',63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11', '12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,', ',39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', '82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', '81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', '250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', '88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', '57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', ',59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,', ',,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,', ',,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79', '80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,', '248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', ',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,', ',,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', ',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', ',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', '65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', '81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26', '27,68,69,,,,,25,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88', '89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57', ',,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', '60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,', ',,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,', ',,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80', ',,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248', '278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83', '84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,', ',,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61', '62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94', '85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207', ',,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66', '67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90', '92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,', ',,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75', '77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68', '69,,,,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89', '96,97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,784,,,207,,,55,56,,,57,,,,,,', ',,,,,,,,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,', '61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', ',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', '65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', '81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', '250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', '88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', '57,,792,,246,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67', ',54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92', '93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,', ',,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77', '78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69', ',,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', '97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,797,', '246,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', '60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,', ',,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,', ',,,,,203,,,207,,,55,56,,,57,,799,,246,,43,,,,,,,,210,,,,,81,75,77,78', '79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', ',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', '97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', ',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', ',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', ',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', '65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', '81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', '250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', '88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', '57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', ',59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,', ',,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,', ',,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79', '80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,', '248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', ',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,', ',,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,156,167,157,180,153,173,163', '162,183,184,178,161,160,155,181,185,186,165,154,168,172,174,166,159', ',,175,182,177,176,169,179,164,152,171,170,,,,,,151,158,149,150,147,148', '112,114,111,,113,,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,', '144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128', '121,,122,,,146,81,,,65,66,67,,54,,,82,59,60,,,,63,,61,62,64,249,250', '68,69,,,,,248,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89', '96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,244', ',246,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', '60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44', ',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', '203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', '82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', '81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', '250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', '88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', '57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', ',59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,', ',,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,', ',,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79', '80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,', '248,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83', '84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,244,,246,,43', ',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', ',61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94', '85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207', ',,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66', '67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30,91,90,92', '93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,', ',,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,244,,246,,43,,,,,,,,210,,,,,81', '75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250', '68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88', '89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57', ',,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', '60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30,91,90,92,93,,,,,,,,,', '44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,', ',,,203,,,207,,,445,56,,,57,,244,,246,,43,,,,,,,,210,,,,,81,75,77,78', '79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', ',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', '97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', ',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', ',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,276,,,273', ',,55,56,,,57,,842,,841,,,,,,,,,,,,,,,81,75,77,78,79,80,,,,76,82,65,66', '67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30,91,90,92', '93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,', ',,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,244,,246,,43,,,,,,,,210,,,,,81', '75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250', '68,69,,,,,248,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89', '96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,455,55,56,,,57', ',244,,246,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54', ',,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,', ',,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,', ',,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', '79,80,,,,76,82,-252,-252,-252,,-252,,,,-252,-252,,,,-252,,-252,-252', '-252,-252,-252,-252,-252,,,,,-252,-252,-252,-252,-252,-252,-252,,,,', ',,,,,-252,,,-252,-252,-252,-252,-252,-252,-252,-252,-252,-252,,-252', '-252,,-252,-252,-252,,,,,,,,,,,,,,,,,,,,-252,,,-252,263,,-252,-252,', ',-252,,-252,,-252,,-252,,,,,,,,-252,,,,,-252,-252,-252,-252,-252,-252', ',,,-252,-252,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,', ',248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', ',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,', ',,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,-252,-252,-252,,-252,,,,-252', '-252,,,,-252,,-252,-252,-252,-252,-252,-252,-252,,,,,-252,-252,-252', '-252,-252,-252,-252,,,,,,,,,,-252,,,-252,-252,-252,-252,-252,-252,-252', '-252,-252,-252,,-252,-252,,-252,-252,-252,,,,,,,,,,,,,,,,,,,,-252,,', '-252,266,,-252,-252,,,-252,,-252,,-252,,-252,,,,,,,,-252,,,,,-252,-252', '-252,-252,-252,-252,,,,-252,-252,65,66,67,,54,,,,59,60,,,,63,,61,62', '64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85', '53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,', ',55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66', '67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90', '92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96,97,,83,84,,,,283,,,', ',,,,,,,,,,,,,,,,276,,,207,,,55,56,,,57,,,,,,,,,,,,,,,,,,,81,75,77,78', '79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', ',,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96', '97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,784,,,207,,,55,56,,,57,,,,,,,,,', ',,,,,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61', '62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94', '85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207', ',,55,56,,,57,,867,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65', '66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91', '90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96,97,,83,84,,,,283', ',,,,,,,,,,,,,,,,,,,276,,,273,,,55,56,,,57,,272,,,,,,,,,,,,,,,,,81,75', '77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68', '69,,,,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89', '96,97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,276,,,207,,,55,56,,,57,,,,,,', ',,,,,,,,,,,,81,75,77,78,79,80,,,,76,82,156,167,157,180,153,173,163,162', '183,184,178,161,160,155,181,185,186,165,154,168,172,174,166,159,,,175', '182,177,176,169,179,164,152,171,170,,,,,,151,158,149,150,147,148,112', '114,,,113,,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145', '132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122', ',,146,81,,,65,66,67,,54,,,82,59,60,,,,63,,61,62,64,249,250,68,69,,,', ',248,278,282,91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96,97', ',83,84,,,,283,,,,,,,,,,,,,,,,,,,,784,,,207,,,55,56,,,57,,,,,,,,,,,,', ',,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62', '64,249,250,68,69,,,,,248,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53', '87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55', '56,,,57,,301,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67', ',54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92', '93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96,97,,83,84,,,,283,,,,,,', ',,,,,,,,,,,,,784,,,207,,,55,56,,,57,,,,,,,,,,,,,,,,,,,81,75,77,78,79', '80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,', '248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', ',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,891,,246', ',43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60', ',,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44', ',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', '203,,,207,,,55,56,,,57,,894,,246,,43,,,,,,,,210,,,,,81,75,77,78,79,80', ',,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248', '278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83', '84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,', ',,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61', '62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94', '85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207', ',,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66', '67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90', '92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,', ',,,,,,,,,,,,,,,,,,203,,,207,475,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81', '75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250', '68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88', '89,96,97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,784,,,207,,,55,56,,,57,,,', ',,,,,,,,,,,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', ',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', ',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', '65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', '81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', '250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', '88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', '57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', ',59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,', ',,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,', ',,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79', '80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,', '248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', ',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,', ',,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', ',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,784,,,207', ',,55,56,,,57,,,,,,,,,,,,,,,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,', '54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93', ',,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,', ',,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', '79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', ',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', '97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,923,', '246,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', '60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,', ',,279,,,95,94,85,53,87,86,88,89,96,97,,83,84,,,,283,,,,,,,,,,,,,,,,', ',,,784,,,207,,,55,56,,,57,,,,,,,,,,,,,,,,,,,81,75,77,78,79,80,,,,76', '82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', '81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26', '27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86', '88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', '57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,', '59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,', ',,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,', ',,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80', ',,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248', '278,282,91,90,92,93,,,,,,,,,,279,,,95,94,507,53,87,86,508,89,96,97,', '83,84,,,,283,,,,,,,,,,,,,,,,,,,,509,,,207,,,55,56,,,57,,,,,,,,,,,,,', ',,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64', '249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,279,,,95,94,507,53', '87,86,508,89,96,97,,83,84,,,,283,,,,,,,,,,,,,,,,,,,,509,,,207,,,55,56', ',,57,,,,,,,,,,,,,,,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', '60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44', ',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', '203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', '82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,301,,,,43,,,,,,,,210,', ',,,81,75,77,78,79,80,,,,76,82,156,167,157,180,153,173,163,162,183,184', '178,161,160,155,181,185,186,165,154,168,172,174,166,159,,,175,182,177', '176,169,179,164,152,171,170,,,,,,151,158,149,150,147,148,112,114,,,113', ',,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145,132,133,', ',,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122,,,146', '81,,,65,66,67,,54,,,82,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30', '91,90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41', '42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,', ',,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', '250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', '88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', '57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', ',59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,', ',,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,', ',,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80', ',,,76,82,-252,-252,-252,,-252,,,,-252,-252,,,,-252,,-252,-252,-252,-252', '-252,-252,-252,,,,,-252,-252,-252,-252,-252,-252,-252,,,,,,,,,,-252', ',,-252,-252,-252,-252,-252,-252,-252,-252,-252,-252,,-252,-252,,-252', '-252,-252,,,,,,,,,,,,,,,,,,,,-252,,,-252,263,,-252,-252,,,-252,,-252', ',-252,,-252,,,,,,,,-252,,,,,-252,-252,-252,-252,-252,-252,,,,-252,-252', '65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', '91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96,97,,83,84,,,,283', ',,,,,,,,,,,,,,,,,,,315,,,33,,,55,56,,,57,,35,,,,,,,,,,,,,,,,,81,75,77', '78,79,80,,,,76,82,-502,-502,-502,,-502,,,,-502,-502,,,,-502,,-502,-502', '-502,-502,-502,-502,-502,,,,,-502,-502,-502,-502,-502,-502,-502,,,,', ',,,,,-502,,,-502,-502,-502,-502,-502,-502,-502,-502,-502,-502,,-502', '-502,,-502,-502,-502,,,,,,,,,,,,,,,,,,,,-502,,,-502,-502,,-502,-502', ',,-502,,-502,,-502,,-502,,,,,,,,-502,,,,,-502,-502,-502,-502,-502,-502', ',,,-502,-502,-503,-503,-503,,-503,,,,-503,-503,,,,-503,,-503,-503,-503', '-503,-503,-503,-503,,,,,-503,-503,-503,-503,-503,-503,-503,,,,,,,,,', '-503,,,-503,-503,-503,-503,-503,-503,-503,-503,-503,-503,,-503,-503', ',-503,-503,-503,,,,,,,,,,,,,,,,,,,,-503,,,-503,-503,,-503,-503,,,-503', ',-503,,-503,,-503,,,,,,,,-503,,,,,-503,-503,-503,-503,-503,-503,,,,-503', '-503,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31', '30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41', '42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,301,,,,43,,,,,,,,210', ',,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64', '249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53', '87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55', '56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,', '54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93', ',,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,', ',,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', '79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', ',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', '97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', ',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,10,54,,,,59,60,,', ',63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11', '12,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,', ',39,,,33,,,55,56,,,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', '82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,566,,246,,43,,,,,,,,210', ',,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64', '249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53', '87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55', '56,,,57,,570,,246,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66', '67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90', '92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,', ',,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75', '77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68', '69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89', '96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,584', ',246,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,-497,-497,-497,,-497', ',,,-497,-497,,,,-497,,-497,-497,-497,-497,-497,-497,-497,,-497,,,-497', '-497,-497,-497,-497,-497,-497,,,,,,,,,,-497,,,-497,-497,-497,-497,-497', '-497,-497,-497,-497,-497,,-497,-497,,-497,-497,-497,,,,,,,,,,,,,,,,', ',,,-497,,,-497,-497,,-497,-497,,,-497,,-497,,-497,,-497,,,,,,,,-497', ',-497,,,-497,-497,-497,-497,-497,-497,,,,-497,-497,-498,-498,-498,,-498', ',,,-498,-498,,,,-498,,-498,-498,-498,-498,-498,-498,-498,,-498,,,-498', '-498,-498,-498,-498,-498,-498,,,,,,,,,,-498,,,-498,-498,-498,-498,-498', '-498,-498,-498,-498,-498,,-498,-498,,-498,-498,-498,,,,,,,,,,,,,,,,', ',,,-498,,,-498,-498,,-498,-498,,,-498,,-498,,-498,,-498,,,,,,,,-498', ',-498,,,-498,-498,-498,-498,-498,-498,,,,-498,-498,65,66,67,,54,,,,59', '60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44', ',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', '203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', '82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91', '90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81', '75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27', '68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88', '89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57', ',,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', '60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44', ',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', '203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76', '82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,301,,,,43,,,,,,,,210,', ',,,81,75,77,78,79,80,,,,76,82,65,66,67,10,54,,,,59,60,,,,63,,61,62,64', '26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,9,44,11,12,95,94,85,53', '87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,39,,,33,,,55,56', ',,57,,35,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54', ',,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,', ',,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,', ',,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', '79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', ',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', '97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', ',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', ',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', ',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', '65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90', '92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', ',,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75', '77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68', '69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89', '96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,614', ',,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60', ',,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44', ',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', '203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76', '82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91', '90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', ',,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,373,,,,43,,,,,,,,210,,,,', '81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26', '27,68,69,,,,,25,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88', '89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57', ',373,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', ',59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30,91,90,92,93,,,,,', ',,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,', ',,,,,,,203,,,207,,,55,56,,,57,,301,,,,43,,,,,,,,210,,,,,81,75,77,78', '79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,', ',25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', ',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,', ',,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', ',61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94', '85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207', ',,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66', '67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93', ',,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,', ',,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', '79,80,,,,76,82,156,167,157,180,153,173,163,162,183,184,178,161,160,155', '181,185,186,165,154,168,172,174,166,159,,,175,182,177,176,169,179,164', '152,171,170,,,,,,151,158,149,150,147,148,112,114,,,113,,,,,,,,142,143', ',140,124,125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137', '136,,123,141,139,138,134,135,130,128,121,,122,,,146,81,,,65,66,67,,54', ',,82,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30,91,90,92,93,', ',,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,', ',,,,,,,,,,,203,,,207,,,55,56,,,57,,301,,,,43,,,,,,,,210,,,,,81,75,77', '78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69', ',,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', '97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', ',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', ',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', ',207,,,55,56,,,57,,682,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76', '82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91', '90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', ',,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81', '75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27', '68,69,,,,,25,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89', '96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,', ',,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60', ',,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,,,,,,,,44,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', ',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', '65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', '81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26', '27,68,69,,,,,25,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88', '89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57', ',,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59', '60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,', ',,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,', ',,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80', ',,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248', '278,282,91,90,92,93,,,,,,,,,,279,,,95,94,85,53,87,86,88,89,96,97,,83', '84,,,,283,,,,,,,,,,,,,,,,,,,,276,,,273,,,55,56,,,57,,700,,701,,,,,,', ',,702,,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61', '62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94', '85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207', ',,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66', '67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93', ',,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,', ',,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75,77', '78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69', ',,,,25,31,30,91,90,92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96', '97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', ',,,,,,,21,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', ',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', ',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', '65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90', '92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', ',,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75', '77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68', '69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89', '96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,', ',,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60', ',,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90,92,93,,,,,,,,,,44,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', ',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', '65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,31,30,91', '90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', ',,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,566,,246,,43,,,,,,,,210,', ',,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64', '249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53', '87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55', '56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,', '54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93', ',,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,', ',,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', '79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', ',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', '97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', ',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', ',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', ',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', '65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', '81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', '250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', '88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', '57,,373,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54', ',,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,', ',,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,', ',,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78', '79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,', ',,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', '97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43', ',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', ',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', ',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', '65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', '81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249', '250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86', '88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,', '57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,', ',59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,', ',,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,', ',,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79', '80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,', '248,278,282,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97', ',83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,745,,,,43', ',,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63', ',61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44,,,95', '94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,', ',207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82', '65,66,67,,54,,,,59,60,,,,63,,61,62,64,26,27,68,69,,,,,25,31,30,91,90', '92,93,,,20,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40', ',,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,21,,,,,81,75', '77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68', '69,,,,,248,31,30,91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96', '97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,301,', ',,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76,82,65,66,67,,54,,,,59,60', ',,,63,,61,62,64,249,250,68,69,,,,,248,278,282,91,90,92,93,,,,,,,,,,44', ',,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42,40,,,,,,,,,,,,,,,,,,,', '203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,,81,75,77,78,79,80,,,,76', '82,65,66,67,,54,,,,59,60,,,,63,,61,62,64,249,250,68,69,,,,,248,278,282', '91,90,92,93,,,,,,,,,,44,,,95,94,85,53,87,86,88,89,96,97,,83,84,,41,42', '40,,,,,,,,,,,,,,,,,,,,203,,,207,,,55,56,,,57,,,,,,43,,,,,,,,210,,,,', '81,75,77,78,79,80,,,,76,82,156,167,157,180,153,173,163,162,183,184,178', '161,160,155,181,185,186,165,154,168,172,174,166,159,,,175,182,177,329', '328,330,327,152,171,170,,,,,,151,158,149,150,325,326,323,114,87,86,324', '89,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145,132,133', ',,,,,335,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122,,', '146,156,167,157,180,153,173,163,162,183,184,178,161,160,155,181,185', '186,165,154,168,172,174,166,159,,,175,182,177,176,169,179,164,152,171', '170,,,,,,151,158,149,150,147,148,112,114,,,113,,,,,,,,142,143,,140,124', '125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123', '141,139,138,134,135,130,128,121,,122,,,146,156,167,157,180,153,173,163', '162,183,184,178,161,160,155,181,185,186,165,154,168,172,174,166,159', ',,175,182,177,176,169,179,164,152,171,170,,,,,,151,158,149,150,147,148', '112,114,352,351,113,353,,,,,,,142,143,,140,124,125,126,,129,131,,,127', ',,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130', '128,121,,122,885,389,146,,886,,,,,,,,142,143,,140,124,125,126,,129,131', ',,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134', '135,130,128,121,,122,883,383,146,,884,,,,,,,,142,143,,140,124,125,126', ',129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139', '138,134,135,130,128,121,,122,385,389,146,,387,,,,,,,,142,143,,140,124', '125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123', '141,139,138,134,135,130,128,121,,122,555,383,146,,556,,,,,,,,142,143', ',140,124,125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137', '136,,123,141,139,138,134,135,130,128,121,,122,557,389,146,,558,,,,,', ',,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,', ',,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122,636,389,146', ',637,,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145,132', '133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122,634', '383,146,,635,,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144', '145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121', ',122,748,389,146,,749,,,,,,,,142,143,,140,124,125,126,,129,131,,,127', ',,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130', '128,121,,122,438,383,146,,439,,,,,,,,142,143,,140,124,125,126,,129,131', ',,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134', '135,130,128,121,,122,,,146,218,222,227,228,229,224,226,234,235,230,231', ',211,212,,,232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219', ',220,,,,,,,603,389,,,604,,,,,236,,574,142,143,,140,124,125,126,,129', '131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138', '134,135,130,128,121,,122,438,383,146,,439,,,,,,,,142,143,,140,124,125', '126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141', '139,138,134,135,130,128,121,,122,,,146,218,222,227,228,229,224,226,234', '235,230,231,,211,212,,,232,233,,,,-218,,,,,,,,,,,215,,221,,217,216,213', '214,225,223,219,,220,,,,,,,438,383,,,439,,,,,236,,-218,142,143,,140', '124,125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136', ',123,141,139,138,134,135,130,128,121,,122,438,383,146,,439,,,,,,,,142', '143,,140,124,125,126,,129,131,,,127,,,,,144,145,132,133,,,,,,,,,,,,', ',137,136,,123,141,139,138,134,135,130,128,121,,122,555,383,146,,556', ',,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145,132,133,', ',,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122,557,389', '146,,558,,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,,144,145', '132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128,121,,122', '380,383,146,,381,,,,,,,,142,143,,140,124,125,126,,129,131,,,127,,,,', '144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135,130,128', '121,,122,438,383,146,,439,,,,,,,,142,143,,140,124,125,126,,129,131,', ',127,,,,,144,145,132,133,,,,,,,,,,,,,,137,136,,123,141,139,138,134,135', '130,128,121,,122,,,146,218,222,227,228,229,224,226,234,235,230,231,', '211,212,,,232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219', ',220,,218,222,227,228,229,224,226,234,235,230,231,,211,212,236,561,232', '233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219,,220,218,222', '227,228,229,224,226,234,235,230,231,,211,212,,236,232,233,,,,,,,,,,', ',,,,215,,221,,217,216,213,214,225,223,219,,220,218,222,227,228,229,224', '226,234,235,230,231,,211,212,,236,232,233,,,,,,,,,,,,,,,215,,221,,217', '216,213,214,225,223,219,,220,218,222,227,228,229,224,226,234,235,230', '231,,211,212,,236,232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225', '223,219,,220,218,222,227,228,229,224,226,234,235,230,231,,211,212,,236', '232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219,,220,218', '222,227,228,229,224,226,234,235,230,231,,211,212,,236,232,233,,,,,,', ',,,,,,,,215,,221,,217,216,213,214,225,223,219,,220,218,222,227,228,229', '224,226,234,235,230,231,,211,212,,236,232,233,,,,,,,,,,,,,,,215,,221', ',217,216,213,214,225,223,219,,220,218,222,227,228,229,224,226,234,235', '230,231,,211,212,,236,232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214', '225,223,219,,220,218,222,227,228,229,224,226,234,235,230,231,,211,212', '294,236,232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219', ',220,218,222,227,228,229,224,226,234,235,230,231,,211,212,,236,232,233', ',,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219,,220,218,222,227', '228,229,224,226,234,235,230,231,,211,212,,236,232,233,,,,,,,,,,,,,,', '215,,221,,217,216,213,214,225,223,219,,220,218,222,227,228,229,224,226', '234,235,230,231,,211,212,294,236,232,233,,,,,,,,,,,,,,,215,,221,,217', '216,213,214,225,223,219,,220,218,222,227,228,229,224,226,234,235,230', '231,,211,212,,236,232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225', '223,219,,220,218,222,227,228,229,224,226,234,235,230,231,,211,212,,236', '232,233,,,,,,,,,,,,,,,215,,221,,217,216,213,214,225,223,219,,220,218', '222,227,228,229,224,226,234,235,230,231,,211,212,,236,232,233,,,,,,', ',,,,,,,,215,,221,,217,216,213,214,225,223,219,,220,,,,,,,,,,,,,,,,236' ] racc_action_table = arr = ::Array.new(25062, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '387,809,672,672,544,609,609,387,387,387,280,313,405,387,387,513,387', '505,746,634,637,582,346,597,509,601,447,316,509,580,328,29,306,814,636', '387,387,328,387,387,387,387,387,307,405,635,544,451,405,405,544,58,448', '398,451,926,496,744,609,3,447,597,582,580,387,387,387,387,387,387,387', '387,387,387,387,387,387,387,497,747,387,387,387,637,387,346,448,653', '387,601,672,387,653,29,280,451,387,636,387,398,387,387,387,387,387,387', '387,601,387,722,387,12,809,313,809,29,722,809,513,505,746,634,637,387', '387,385,387,601,387,316,387,601,385,385,385,58,636,513,385,385,600,385', '513,306,814,306,814,635,306,814,385,404,428,496,307,496,307,722,496', '307,385,385,13,385,385,385,385,385,744,555,744,73,14,744,556,497,747', '497,747,73,497,747,531,404,765,765,428,404,404,385,385,385,385,385,385', '385,385,385,385,385,385,385,385,15,600,385,385,385,348,385,202,341,23', '385,341,555,385,508,603,380,556,385,600,385,37,385,385,385,385,385,385', '385,343,385,385,385,337,868,39,868,28,204,600,531,531,339,600,28,385', '385,53,385,531,385,381,385,202,53,53,53,44,380,53,53,53,380,53,508,603', '348,348,348,341,341,508,603,53,53,487,508,603,487,696,508,603,53,53', '204,53,53,53,53,53,343,343,343,381,337,337,337,381,508,603,326,327,329', '339,339,339,65,326,327,329,79,53,53,53,53,53,53,53,53,53,53,53,53,53', '53,696,323,53,53,53,884,299,53,323,299,53,883,324,53,53,80,53,874,53', '324,53,187,53,53,53,53,53,53,53,325,53,748,53,908,332,330,325,507,310', '189,908,332,330,310,437,53,53,53,53,908,53,437,437,437,885,884,437,437', '437,762,437,883,884,874,874,874,874,884,883,5,437,884,17,883,5,300,203', '883,300,437,437,748,437,437,437,437,437,507,748,884,311,38,311,748,507', '883,111,748,286,507,111,111,205,507,885,762,762,762,762,649,649,885', '755,411,17,748,885,755,17,437,885,507,490,824,206,490,437,277,824,411', '411,437,437,38,277,242,648,38,885,243,286,648,247,277,286,411,256,411', '259,411,411,411,411,652,437,652,652,652,652,18,18,267,558,558,558,269', '558,437,270,437,558,558,437,305,305,558,271,558,558,558,558,558,558', '558,897,897,296,296,558,558,558,558,558,558,558,621,621,40,40,652,652', '652,652,276,558,283,283,558,558,558,558,558,558,558,558,558,558,278', '558,558,279,558,558,558,421,421,421,421,421,421,421,282,275,421,421', '846,287,288,274,275,421,421,846,558,558,274,558,558,275,558,558,846', '291,558,274,558,421,558,421,558,421,421,421,421,421,421,421,558,421', '298,302,440,558,558,558,558,558,558,440,440,440,558,558,440,440,440', '604,440,412,312,558,315,782,604,317,342,345,440,604,782,367,372,604', '375,412,412,440,440,782,440,440,440,440,440,379,386,783,406,463,463', '412,785,463,783,412,412,412,412,785,407,463,463,783,463,463,463,463', '785,463,463,408,409,463,434,289,465,440,463,463,463,463,289,465,440', '449,450,452,453,440,440,289,465,454,456,463,463,457,463,463,463,463', '463,463,463,463,463,201,463,461,640,463,440,466,201,476,477,640,478', '488,557,557,557,201,557,440,640,440,557,557,440,492,498,557,499,557', '557,557,557,557,557,557,535,539,547,552,557,557,557,557,557,557,557', '559,567,673,673,423,673,673,673,569,557,572,574,557,557,557,557,557', '557,557,557,557,557,583,557,557,586,557,557,557,419,419,419,419,419', '419,419,423,724,419,419,423,423,423,423,724,419,419,591,557,557,592', '557,557,724,557,557,599,602,557,605,557,419,557,419,557,419,419,419', '419,419,419,419,557,419,607,608,610,557,557,557,557,557,557,613,16,623', '557,557,63,63,63,16,63,629,631,557,63,63,633,654,16,63,655,63,63,63', '63,63,63,63,656,662,667,670,63,63,63,63,63,63,63,681,699,63,703,705', '708,713,370,715,63,720,721,63,63,63,63,63,63,63,63,63,63,723,63,63,726', '63,63,63,370,370,370,370,370,370,370,370,370,370,370,886,370,370,511', '729,370,370,886,63,730,511,63,886,735,63,63,886,738,63,511,743,370,751', '370,63,370,370,370,370,370,370,370,63,370,756,757,758,63,63,63,63,63', '63,770,776,784,63,63,63,370,786,370,749,63,100,100,100,100,100,749,787', '790,100,100,749,795,798,100,749,100,100,100,100,100,100,100,802,803', '804,816,100,100,100,100,100,100,100,817,823,100,828,424,829,830,833', '100,100,100,100,100,100,100,100,100,100,100,100,100,100,834,100,100', '847,100,100,100,425,425,425,425,425,425,425,424,314,425,425,424,424', '424,424,314,425,425,851,100,854,857,100,880,314,100,100,881,882,100', '892,100,425,896,425,100,425,425,425,425,425,425,425,100,425,902,903', '904,100,100,100,100,100,100,905,45,906,100,100,700,700,700,45,700,100', '910,913,700,700,1,,45,700,,700,700,700,700,700,700,700,,,,,700,700,700', '700,700,700,700,109,109,109,109,109,,,,,700,,,700,700,700,700,700,700', '700,700,700,700,,700,700,,,516,700,516,516,516,516,354,354,354,354,354', '7,7,7,7,7,,,,,,700,,,700,,,700,700,,,700,,,,,,837,516,837,837,837,837', ',,,516,516,516,516,700,700,700,700,700,700,,,,700,700,842,842,842,700', '842,,,,842,842,,,,842,837,842,842,842,842,842,842,842,837,837,837,837', '842,842,842,842,842,842,842,,,,,,,,560,,842,,,842,842,842,842,842,842', '842,842,842,842,,842,842,,,,842,560,560,560,560,560,560,560,560,560', '560,560,,560,560,,,560,560,,842,,,842,,,842,842,,,842,,,560,,560,,560', '560,560,560,560,560,560,,560,,,,842,842,842,842,842,842,,,,842,842,', '560,,842,872,872,872,872,872,872,,,,872,872,,,,872,,872,872,872,872', '872,872,872,,,,,872,872,872,872,872,872,872,,,872,,,,,,872,872,872,872', '872,872,872,872,872,872,872,872,872,872,,872,872,,872,872,872,,,,,,', ',,,,,,,,,,,,,872,,,872,,,872,872,,,872,,872,,,,872,760,,760,760,760', '760,,872,,,,,872,872,872,872,872,872,,,,872,872,869,869,869,869,869', '869,,,,869,869,,,,869,,869,869,869,869,869,869,869,760,760,760,760,869', '869,869,869,869,869,869,,,869,,,,,,869,869,869,869,869,869,869,869,869', '869,869,869,869,869,,869,869,,869,869,869,402,402,402,402,402,402,402', '402,402,402,402,,402,402,,,402,402,,869,,,869,,,869,869,,,869,,869,402', ',402,869,402,402,402,402,402,402,402,869,402,,,,869,869,869,869,869', '869,,,,869,869,190,190,190,190,190,190,,,,190,190,,,,190,,190,190,190', '190,190,190,190,,,,,190,190,190,190,190,190,190,,,190,,,,,,190,190,190', '190,190,190,190,190,190,190,190,190,190,190,,190,190,,190,190,190,417', ',,,,,,,,,,,,,,,417,417,,190,,,190,,,190,190,,,190,,190,417,,417,190', '417,417,417,417,,,417,190,417,,,,190,190,190,190,190,190,,,,190,190', '864,864,864,864,864,864,,,,864,864,,,,864,,864,864,864,864,864,864,864', ',,,,864,864,864,864,864,864,864,,,864,,,,,,864,864,864,864,864,864,864', '864,864,864,864,864,864,864,,864,864,,864,864,864,416,,,,,,,,,,,,,,', ',416,416,,864,,,864,,,864,864,,,864,,864,416,,416,864,416,416,416,416', ',,416,864,416,,,,864,864,864,864,864,864,,,,864,864,862,862,862,862', '862,862,,,,862,862,,,,862,,862,862,862,862,862,862,862,,,,,862,862,862', '862,862,862,862,,,862,,,,,,862,862,862,862,862,862,862,862,862,862,862', '862,862,862,,862,862,,862,862,862,403,403,403,403,403,403,403,403,403', '403,403,,403,403,,,403,403,,862,,,862,,,862,862,,,862,,862,403,,403', '862,403,403,403,403,403,403,403,862,403,,,,862,862,862,862,862,862,', ',,862,862,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2,2,2,,,,,2,2,2,2,2,2,2,', ',2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,,2,2,2,413,413,413,413,413', '413,413,,,413,413,,,,,,413,413,,2,,,2,,,2,2,,,2,,2,413,,413,2,413,413', '413,413,413,413,413,2,413,,,,2,2,2,2,2,2,,,,2,2,716,716,716,716,716', '716,,,,716,716,,,,716,,716,716,716,716,716,716,716,,,,,716,716,716,716', '716,716,716,,,716,,,,,,716,716,716,716,716,716,716,716,716,716,716,716', '716,716,,716,716,,716,716,716,418,418,418,418,418,418,418,,,418,418', ',,,,,418,418,,716,,,716,,,716,716,,,716,,716,418,,418,716,418,418,418', '418,418,418,418,716,418,,,,716,716,716,716,716,716,,,,716,716,717,717', '717,717,717,717,,,,717,717,,,,717,,717,717,717,717,717,717,717,,,,,717', '717,717,717,717,717,717,,,717,,,,,,717,717,717,717,717,717,717,717,717', '717,717,717,717,717,,717,717,,717,717,717,414,,,,,,,,,,,,,,,,414,414', ',717,,,717,,,717,717,,,717,,717,414,,414,717,414,414,414,414,,,414,717', '414,,,,717,717,717,717,717,717,,,,717,717,819,819,819,819,819,819,,', ',819,819,,,,819,,819,819,819,819,819,819,819,,,,,819,819,819,819,819', '819,819,,,819,,,,,,819,819,819,819,819,819,819,819,819,819,819,819,819', '819,,819,819,,819,819,819,415,,,,,,,,,,,,,,,,415,415,,819,,,819,,,819', '819,,,819,,819,415,,415,819,415,415,415,415,,,415,819,415,,,,819,819', '819,819,819,819,,,,819,819,491,491,491,491,491,491,,,,491,491,,,,491', ',491,491,491,491,491,491,491,,,,,491,491,491,491,491,491,491,,,491,', ',,,,491,491,491,491,491,491,491,491,491,491,491,491,491,491,,491,491', ',491,491,491,420,420,420,420,420,420,420,,,420,420,,,,,,420,420,,491', ',,491,,,491,491,,,491,,491,420,,420,491,420,420,420,420,420,420,420', '491,420,,,,491,491,491,491,491,491,,,,491,491,650,650,650,650,650,650', ',,,650,650,,,,650,,650,650,650,650,650,650,650,,,,,650,650,650,650,650', '650,650,,,650,,,,,,650,650,650,650,650,650,650,650,650,650,650,650,650', '650,,650,650,,650,650,650,422,422,422,422,422,422,422,,,422,422,,,,', ',422,422,,650,,,650,,,650,650,,,650,,650,422,,422,650,422,422,422,422', '422,422,422,650,422,,,,650,650,650,650,650,650,,,,650,650,806,806,806', '806,806,806,,,,806,806,,,,806,,806,806,806,806,806,806,806,,,,,806,806', '806,806,806,806,806,,,806,,,,,,806,806,806,806,806,806,806,806,806,806', '806,806,806,806,,806,806,,806,806,806,426,426,426,426,426,426,426,426', ',426,426,,,,,,426,426,,806,,,806,,,806,806,,,806,,806,426,,426,806,426', '426,426,426,426,426,426,806,426,,,,806,806,806,806,806,806,,,,806,806', '273,273,273,273,273,273,,,,273,273,,,,273,,273,273,273,273,273,273,273', ',,,,273,273,273,273,273,273,273,,,273,,,,,,273,273,273,273,273,273,273', '273,273,273,273,273,273,273,,273,273,,273,273,273,410,,,,,,,,,,,,,,', ',410,410,,273,,,273,,,273,273,,,273,,273,410,,410,273,410,410,410,410', ',,,273,,,,,273,273,273,273,273,273,,,,273,273,33,33,33,33,33,33,,,,33', '33,,,,33,,33,33,33,33,33,33,33,,,,,33,33,33,33,33,33,33,,,33,,,,,,33', '33,33,33,33,33,33,33,33,33,33,33,33,33,,33,33,,33,33,33,,,,,,,,,,,,', ',,,,,,,33,,,33,,,33,33,,,33,,33,,,,33,,,,,,,,33,,,,,33,33,33,33,33,33', ',,,33,33,794,794,794,794,794,794,,,,794,794,,,,794,,794,794,794,794', '794,794,794,,,,,794,794,794,794,794,794,794,,,794,,,,,,794,794,794,794', '794,794,794,794,794,794,794,794,794,794,,794,794,,794,794,794,,,,,,', ',,,,,,,,,,,,,794,,,794,,,794,794,,,794,,794,,,,794,,,,,,,,794,,,,,794', '794,794,794,794,794,,,,794,794,268,268,268,268,268,268,,,,268,268,,', ',268,,268,268,268,268,268,268,268,,,,,268,268,268,268,268,268,268,,', '268,,,,,,268,268,268,268,268,268,268,268,268,268,268,268,268,268,,268', '268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268,,,268,268,,,268,,268,', ',,268,,,,,,,,268,,,,,268,268,268,268,268,268,,,,268,268,728,728,728', '728,728,728,,,,728,728,,,,728,,728,728,728,728,728,728,728,,,,,728,728', '728,728,728,728,728,,,728,,,,,,728,728,728,728,728,728,728,728,728,728', '728,728,728,728,,728,728,,728,728,728,,,,,,,,,,,,,,,,,,,,728,,,728,', ',728,728,,,728,,728,,,,728,,,,,,,,728,,,,,728,728,728,728,728,728,,', ',728,728,207,207,207,207,207,207,,,,207,207,,,,207,,207,207,207,207', '207,207,207,,,,,207,207,207,207,207,207,207,,,207,,,,,,207,207,207,207', '207,207,207,207,207,207,207,207,207,207,,207,207,,207,207,207,,,,,,', ',,,,,,,,,,,,,207,,,207,,,207,207,,,207,,207,,,,207,,,,,,,,207,,,,,207', '207,207,207,207,207,,,,207,207,704,704,704,704,704,704,,,,704,704,,', ',704,,704,704,704,704,704,704,704,,,,,704,704,704,704,704,704,704,,', '704,,,,,,704,704,704,704,704,704,704,704,704,704,704,704,704,704,,704', '704,,704,704,704,,,,,,,,,,,,,,,,,,,,704,,,704,,,704,704,,,704,,704,', ',,704,,,,,,,,704,,,,,704,704,704,704,704,704,,,,704,704,500,500,500', '500,500,500,,,,500,500,,,,500,,500,500,500,500,500,500,500,,,,,500,500', '500,500,500,500,500,,,500,,,,,,500,500,500,500,500,500,500,500,500,500', '500,500,500,500,,500,500,,500,500,500,,,,,,,,,,,,,,,,,,,,500,,,500,', ',500,500,,,500,,500,,,,500,,,,,,,,500,,,,,500,500,500,500,500,500,,', ',500,500,739,739,739,739,739,739,,,,739,739,,,,739,,739,739,739,739', '739,739,739,,,,,739,739,739,739,739,739,739,,,739,,,,,,739,739,739,739', '739,739,739,739,739,739,739,739,739,739,,739,739,,739,739,739,,,,,,', ',,,,,,,,,,,,,739,,,739,,,739,739,,,739,,739,,,,739,,,,,,,,739,,,,,739', '739,739,739,739,739,,,,739,739,740,740,740,740,740,740,,,,740,740,,', ',740,,740,740,740,740,740,740,740,,,,,740,740,740,740,740,740,740,,', '740,,,,,,740,740,740,740,740,740,740,740,740,740,740,740,740,740,,740', '740,,740,740,740,,,,,,,,,,,,,,,,,,,,740,,,740,,,740,740,,,740,,740,', ',,740,,,,,,,,740,,,,,740,740,740,740,740,740,,,,740,740,495,495,495', '495,495,495,,,,495,495,,,,495,,495,495,495,495,495,495,495,,,,,495,495', '495,495,495,495,495,,,495,,,,,,495,495,495,495,495,495,495,495,495,495', '495,495,495,495,,495,495,,495,495,495,,,,,,,,,,,,,,,,,,,,495,,,495,', ',495,495,,,495,,495,,,,495,,,,,,,,495,,,,,495,495,495,495,495,495,,', ',495,495,674,674,674,674,674,674,,,,674,674,,,,674,,674,674,674,674', '674,674,674,,,,,674,674,674,674,674,674,674,,,674,,,,,,674,674,674,674', '674,674,674,674,674,674,674,674,674,674,,674,674,,674,674,674,,,,,,', ',,,,,,,,,,,,,674,,,674,,,674,674,,,674,,674,,,,674,,,,,,,,674,,,,,674', '674,674,674,674,674,,,,674,674,366,366,366,366,366,366,,,,366,366,,', ',366,,366,366,366,366,366,366,366,,,,,366,366,366,366,366,366,366,,', '366,,,,,,366,366,366,366,366,366,366,366,366,366,366,366,366,366,,366', '366,,366,366,366,,,,,,,,,,,,,,,,,,,,366,,,366,,,366,366,,,366,,366,', ',,366,,,,,,,,366,,,,,366,366,366,366,366,366,,,,366,366,295,295,295', '295,295,295,,,,295,295,,,,295,,295,295,295,295,295,295,295,,,,,295,295', '295,295,295,295,295,,,295,,,,,,295,295,295,295,295,295,295,295,295,295', '295,295,295,295,,295,295,,295,295,295,,,,,,,,,,,,,,,,,,,,295,,,295,', ',295,295,,,295,,295,,,,295,,,,,,,,295,,,,,295,295,295,295,295,295,,', ',295,295,752,752,752,752,752,752,,,,752,752,,,,752,,752,752,752,752', '752,752,752,,,,,752,752,752,752,752,752,752,,,752,,,,,,752,752,752,752', '752,752,752,752,752,752,752,752,752,752,,752,752,,752,752,752,,,,,,', ',,,,,,,,,,,,,752,,,752,,,752,752,,,752,,752,,,,752,,,,,,,,752,,,,,752', '752,752,752,752,752,,,,752,752,651,651,651,651,651,651,,,,651,651,,', ',651,,651,651,651,651,651,651,651,,,,,651,651,651,651,651,651,651,,', '651,,,,,,651,651,651,651,651,651,651,651,651,651,651,651,651,651,,651', '651,,651,651,651,,,,,,,,,,,,,,,,,,,,651,,,651,,,651,651,,,651,,651,', ',,651,,,,,,,,651,,,,,651,651,651,651,651,651,,,,651,651,878,878,878', '878,878,878,,,,878,878,,,,878,,878,878,878,878,878,878,878,,,,,878,878', '878,878,878,878,878,,,878,,,,,,878,878,878,878,878,878,878,878,878,878', '878,878,878,878,,878,878,,878,878,878,,,,,,,,,,,,,,,,,,,,878,,,878,', ',878,878,,,878,,878,,,,878,,,,,,,,878,,,,,878,878,878,878,878,878,,', ',878,878,222,222,222,,222,,,,222,222,,,,222,,222,222,222,222,222,222', '222,,,,,222,222,222,222,222,222,222,,,,,,,,,,222,,,222,222,222,222,222', '222,222,222,222,222,,222,222,,222,222,222,,,,,,,,,,,,,,,,,,,,222,,,222', ',,222,222,,,222,,,,,,222,,,,,,,,222,,,,,222,222,222,222,222,222,,,,222', '222,223,223,223,,223,,,,223,223,,,,223,,223,223,223,223,223,223,223', ',,,,223,223,223,223,223,223,223,,,,,,,,,,223,,,223,223,223,223,223,223', '223,223,223,223,,223,223,,223,223,223,,,,,,,,,,,,,,,,,,,,223,,,223,', ',223,223,,,223,,,,,,223,,,,,,,,223,,,,,223,223,223,223,223,223,,,,223', '223,224,224,224,,224,,,,224,224,,,,224,,224,224,224,224,224,224,224', ',,,,224,224,224,224,224,224,224,,,,,,,,,,224,,,224,224,224,224,224,224', '224,224,224,224,,224,224,,224,224,224,,,,,,,,,,,,,,,,,,,,224,,,224,', ',224,224,,,224,,,,,,224,,,,,,,,224,,,,,224,224,224,224,224,224,,,,224', '224,225,225,225,,225,,,,225,225,,,,225,,225,225,225,225,225,225,225', ',,,,225,225,225,225,225,225,225,,,,,,,,,,225,,,225,225,225,225,225,225', '225,225,225,225,,225,225,,225,225,225,,,,,,,,,,,,,,,,,,,,225,,,225,', ',225,225,,,225,,,,,,225,,,,,,,,225,,,,,225,225,225,225,225,225,,,,225', '225,226,226,226,,226,,,,226,226,,,,226,,226,226,226,226,226,226,226', ',,,,226,226,226,226,226,226,226,,,,,,,,,,226,,,226,226,226,226,226,226', '226,226,226,226,,226,226,,226,226,226,,,,,,,,,,,,,,,,,,,,226,,,226,', ',226,226,,,226,,,,,,226,,,,,,,,226,,,,,226,226,226,226,226,226,,,,226', '226,682,682,682,,682,,,,682,682,,,,682,,682,682,682,682,682,682,682', ',,,,682,682,682,682,682,682,682,,,,,,,,,,682,,,682,682,682,682,682,682', '682,682,682,682,,682,682,,682,682,682,,,,,,,,,,,,,,,,,,,,682,,,682,', ',682,682,,,682,,,,,,682,,,,,,,,682,,,,,682,682,682,682,682,682,,,,682', '682,683,683,683,,683,,,,683,683,,,,683,,683,683,683,683,683,683,683', ',,,,683,683,683,683,683,683,683,,,,,,,,,,683,,,683,683,683,683,683,683', '683,683,683,683,,683,683,,683,683,683,,,,,,,,,,,,,,,,,,,,683,,,683,', ',683,683,,,683,,,,,,683,,,,,,,,683,,,,,683,683,683,683,683,683,,,,683', '683,693,693,693,,693,,,,693,693,,,,693,,693,693,693,693,693,693,693', ',,,,693,693,693,693,693,693,693,,,,,,,,,,693,,,693,693,693,693,693,693', '693,693,693,693,,693,693,,693,693,693,,,,,,,,,,,,,,,,,,,,693,,,693,', ',693,693,,,693,,,,,,693,,,,,,,,693,,,,,693,693,693,693,693,693,,,,693', '693,694,694,694,,694,,,,694,694,,,,694,,694,694,694,694,694,694,694', ',,,,694,694,694,694,694,694,694,,,,,,,,,,694,,,694,694,694,694,694,694', '694,694,694,694,,694,694,,694,694,694,,,,,,,,,,,,,,,,,,,,694,,,694,', ',694,694,,,694,,,,,,694,,,,,,,,694,,,,,694,694,694,694,694,694,,,,694', '694,695,695,695,,695,,,,695,695,,,,695,,695,695,695,695,695,695,695', ',,,,695,695,695,695,695,695,695,,,,,,,,,,695,,,695,695,695,695,695,695', '695,695,695,695,,695,695,,695,695,695,,,,,,,,,,,,,,,,,,,,695,,,695,', ',695,695,,,695,,,,,,695,,,,,,,,695,,,,,695,695,695,695,695,695,,,,695', '695,227,227,227,,227,,,,227,227,,,,227,,227,227,227,227,227,227,227', ',,,,227,227,227,227,227,227,227,,,,,,,,,,227,,,227,227,227,227,227,227', '227,227,227,227,,227,227,,227,227,227,,,,,,,,,,,,,,,,,,,,227,,,227,', ',227,227,,,227,,,,,,227,,,,,,,,227,,,,,227,227,227,227,227,227,,,,227', '227,701,701,701,,701,,,,701,701,,,,701,,701,701,701,701,701,701,701', ',,,,701,701,701,701,701,701,701,,,,,,,,,,701,,,701,701,701,701,701,701', '701,701,701,701,,701,701,,,,701,,,,,,,,,,,,,,,,,,,,701,,,701,,,701,701', ',,701,,,,,,,,,,,,,,,,,,,701,701,701,701,701,701,,,,701,701,228,228,228', ',228,,,,228,228,,,,228,,228,228,228,228,228,228,228,,,,,228,228,228', '228,228,228,228,,,,,,,,,,228,,,228,228,228,228,228,228,228,228,228,228', ',228,228,,228,228,228,,,,,,,,,,,,,,,,,,,,228,,,228,,,228,228,,,228,', ',,,,228,,,,,,,,228,,,,,228,228,228,228,228,228,,,,228,228,229,229,229', ',229,,,,229,229,,,,229,,229,229,229,229,229,229,229,,,,,229,229,229', '229,229,229,229,,,,,,,,,,229,,,229,229,229,229,229,229,229,229,229,229', ',229,229,,229,229,229,,,,,,,,,,,,,,,,,,,,229,,,229,,,229,229,,,229,', ',,,,229,,,,,,,,229,,,,,229,229,229,229,229,229,,,,229,229,707,707,707', ',707,,,,707,707,,,,707,,707,707,707,707,707,707,707,,,,,707,707,707', '707,707,707,707,,,,,,,,,,707,,,707,707,707,707,707,707,707,707,707,707', ',707,707,,707,707,707,,,,,,,,,,,,,,,,,,,,707,,,707,,,707,707,,,707,', '707,,707,,707,,,,,,,,707,,,,,707,707,707,707,707,707,,,,707,707,230', '230,230,,230,,,,230,230,,,,230,,230,230,230,230,230,230,230,,,,,230', '230,230,230,230,230,230,,,,,,,,,,230,,,230,230,230,230,230,230,230,230', '230,230,,230,230,,230,230,230,,,,,,,,,,,,,,,,,,,,230,,,230,,,230,230', ',,230,,,,,,230,,,,,,,,230,,,,,230,230,230,230,230,230,,,,230,230,710', '710,710,,710,,,,710,710,,,,710,,710,710,710,710,710,710,710,,,,,710', '710,710,710,710,710,710,,,,,,,,,,710,,,710,710,710,710,710,710,710,710', '710,710,,710,710,,710,710,710,,,,,,,,,,,,,,,,,,,,710,,,710,,,710,710', ',,710,,710,,710,,710,,,,,,,,710,,,,,710,710,710,710,710,710,,,,710,710', '712,712,712,,712,,,,712,712,,,,712,,712,712,712,712,712,712,712,,,,', '712,712,712,712,712,712,712,,,,,,,,,,712,,,712,712,712,712,712,712,712', '712,712,712,,712,712,,712,712,712,,,,,,,,,,,,,,,,,,,,712,,,712,,,712', '712,,,712,,712,,712,,712,,,,,,,,712,,,,,712,712,712,712,712,712,,,,712', '712,231,231,231,,231,,,,231,231,,,,231,,231,231,231,231,231,231,231', ',,,,231,231,231,231,231,231,231,,,,,,,,,,231,,,231,231,231,231,231,231', '231,231,231,231,,231,231,,231,231,231,,,,,,,,,,,,,,,,,,,,231,,,231,', ',231,231,,,231,,,,,,231,,,,,,,,231,,,,,231,231,231,231,231,231,,,,231', '231,232,232,232,,232,,,,232,232,,,,232,,232,232,232,232,232,232,232', ',,,,232,232,232,232,232,232,232,,,,,,,,,,232,,,232,232,232,232,232,232', '232,232,232,232,,232,232,,232,232,232,,,,,,,,,,,,,,,,,,,,232,,,232,', ',232,232,,,232,,,,,,232,,,,,,,,232,,,,,232,232,232,232,232,232,,,,232', '232,233,233,233,,233,,,,233,233,,,,233,,233,233,233,233,233,233,233', ',,,,233,233,233,233,233,233,233,,,,,,,,,,233,,,233,233,233,233,233,233', '233,233,233,233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,', ',233,233,,,233,,,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233', '233,234,234,234,,234,,,,234,234,,,,234,,234,234,234,234,234,234,234', ',,,,234,234,234,234,234,234,234,,,,,,,,,,234,,,234,234,234,234,234,234', '234,234,234,234,,234,234,,234,234,234,,,,,,,,,,,,,,,,,,,,234,,,234,', ',234,234,,,234,,,,,,234,,,,,,,,234,,,,,234,234,234,234,234,234,,,,234', '234,235,235,235,,235,,,,235,235,,,,235,,235,235,235,235,235,235,235', ',,,,235,235,235,235,235,235,235,,,,,,,,,,235,,,235,235,235,235,235,235', '235,235,235,235,,235,235,,235,235,235,,,,,,,,,,,,,,,,,,,,235,,,235,', ',235,235,,,235,,,,,,235,,,,,,,,235,,,,,235,235,235,235,235,235,,,,235', '235,236,236,236,,236,,,,236,236,,,,236,,236,236,236,236,236,236,236', ',,,,236,236,236,236,236,236,236,,,,,,,,,,236,,,236,236,236,236,236,236', '236,236,236,236,,236,236,,236,236,236,,,,,,,,,,,,,,,,,,,,236,,,236,', ',236,236,,,236,,,,,,236,,,,,,,,236,,,,,236,236,236,236,236,236,,,,236', '236,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,,,9,9,9,9,9,9,9', '9,9,9,,,,,,9,9,9,9,9,9,9,9,9,,9,,,,,,,,9,9,,9,9,9,9,,9,9,,,9,,,,,9,9', '9,9,,,,,,,,,,,,,,9,9,,9,9,9,9,9,9,9,9,9,,9,,,9,9,,,25,25,25,,25,,,9', '25,25,,,,25,,25,25,25,25,25,25,25,,,,,25,25,25,25,25,25,25,,,,,,,,,', '25,,,25,25,25,25,25,25,25,25,25,25,,25,25,,25,25,25,,,,,,,,,,,,,,,,', ',,,25,,,25,,,25,25,,,25,,25,,25,,25,,,,,,,,25,,,,,25,25,25,25,25,25', ',,,25,25,737,737,737,,737,,,,737,737,,,,737,,737,737,737,737,737,737', '737,,,,,737,737,737,737,737,737,737,,,737,,,,,,,737,,,737,737,737,737', '737,737,737,737,737,737,,737,737,,737,737,737,,,,,,,,,,,,,,,,,,,,737', ',,737,,,737,737,,,737,,,,,,737,,,,,,,,737,,,,,737,737,737,737,737,737', ',,,737,737,244,244,244,,244,,,,244,244,,,,244,,244,244,244,244,244,244', '244,,,,,244,244,244,244,244,244,244,,,,,,,,,,244,,,244,244,244,244,244', '244,244,244,244,244,,244,244,,244,244,244,,,,,,,,,,,,,,,,,,,,244,,,244', ',,244,244,,,244,,,,,,244,,,,,,,,244,,,,,244,244,244,244,244,244,,,,244', '244,246,246,246,,246,,,,246,246,,,,246,,246,246,246,246,246,246,246', ',,,,246,246,246,246,246,246,246,,,,,,,,,,246,,,246,246,246,246,246,246', '246,246,246,246,,246,246,,246,246,246,,,,,,,,,,,,,,,,,,,,246,,,246,', ',246,246,,,246,,,,,,246,,,,,,,,246,,,,,246,246,246,246,246,246,,,,246', '246,745,745,745,,745,,,,745,745,,,,745,,745,745,745,745,745,745,745', ',,,,745,745,745,745,745,745,745,,,,,,,,,,745,,,745,745,745,745,745,745', '745,745,745,745,,745,745,,745,745,745,,,,,,,,,,,,,,,,,,,,745,,,745,', ',745,745,,,745,,,,,,745,,,,,,,,745,,,,,745,745,745,745,745,745,,,,745', '745,26,26,26,,26,,,,26,26,,,,26,,26,26,26,26,26,26,26,,,,,26,26,26,26', '26,26,26,,,,,,,,,,26,,,26,26,26,26,26,26,26,26,26,26,,26,26,,26,26,26', ',,,,,,,,,,,,,,,,,,,26,,,26,,,26,26,,,26,,26,,26,,26,,,,,,,,26,,,,,26', '26,26,26,26,26,,,,26,26,753,753,753,,753,,,,753,753,,,,753,,753,753', '753,753,753,753,753,,,,,753,753,753,753,753,753,753,,,753,,,,,,,753', ',,753,753,753,753,753,753,753,753,753,753,,753,753,,753,753,753,,,,', ',,,,,,,,,,,,,,,753,,,753,,,753,753,,,753,,,,,,753,,,,,,,,753,,,,,753', '753,753,753,753,753,,,,753,753,27,27,27,,27,,,,27,27,,,,27,,27,27,27', '27,27,27,27,,,,,27,27,27,27,27,27,27,,,,,,,,,,27,,,27,27,27,27,27,27', '27,27,27,27,,27,27,,27,27,27,,,,,,,,,,,,,,,,,,,,27,,,27,,,27,27,,,27', ',27,,27,,27,,,,,,,,27,,,,,27,27,27,27,27,27,,,,27,27,766,766,766,,766', ',,,766,766,,,,766,,766,766,766,766,766,766,766,,,,,766,766,766,766,766', '766,766,,,,,,,,,,766,,,766,766,766,766,766,766,766,766,766,766,,766', '766,,766,766,766,,,,,,,,,,,,,,,,,,,,766,,,766,,,766,766,,,766,,,,,,766', ',,,,,,,766,,,,,766,766,766,766,766,766,,,,766,766,257,257,257,,257,', ',,257,257,,,,257,,257,257,257,257,257,257,257,,,,,257,257,257,257,257', '257,257,,,,,,,,,,257,,,257,257,257,257,257,257,257,257,257,257,,257', '257,,257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257,,,257,257,,,257,,257,', '257,,257,,,,,,,,257,,,,,257,257,257,257,257,257,,,,257,257,780,780,780', ',780,,,,780,780,,,,780,,780,780,780,780,780,780,780,,,,,780,780,780', '780,780,780,780,,,,,,,,,,780,,,780,780,780,780,780,780,780,780,780,780', ',780,780,,780,780,780,,,,,,,,,,,,,,,,,,,,780,,,780,,,780,780,,,780,', ',,,,780,,,,,,,,780,,,,,780,780,780,780,780,780,,,,780,780,781,781,781', ',781,,,,781,781,,,,781,,781,781,781,781,781,781,781,,,,,781,781,781', '781,781,781,781,,,,,,,,,,781,,,781,781,781,781,781,781,781,781,781,781', ',781,781,,,,781,,,,,,,,,,,,,,,,,,,,781,,,781,,,781,781,,,781,,781,,781', ',,,,,,,,,,,,,,781,781,781,781,781,781,,,,781,781,263,263,263,,263,,', ',263,263,,,,263,,263,263,263,263,263,263,263,,,,,263,263,263,263,263', '263,263,,,,,,,,,,263,,,263,263,263,263,263,263,263,263,263,263,,263', '263,,263,263,263,,,,,,,,,,,,,,,,,,,,263,,,263,,,263,263,,,263,,263,', '263,,263,,,,,,,,263,,,,,263,263,263,263,263,263,,,,263,263,266,266,266', ',266,,,,266,266,,,,266,,266,266,266,266,266,266,266,,,,,266,266,266', '266,266,266,266,,,,,,,,,,266,,,266,266,266,266,266,266,266,266,266,266', ',266,266,,266,266,266,,,,,,,,,,,,,,,,,,,,266,,,266,,266,266,266,,,266', ',266,,266,,266,,,,,,,,266,,,,,266,266,266,266,266,266,,,,266,266,792', '792,792,,792,,,,792,792,,,,792,,792,792,792,792,792,792,792,,,,,792', '792,792,792,792,792,792,,,,,,,,,,792,,,792,792,792,792,792,792,792,792', '792,792,,792,792,,792,792,792,,,,,,,,,,,,,,,,,,,,792,,,792,,,792,792', ',,792,,,,,,792,,,,,,,,792,,,,,792,792,792,792,792,792,,,,792,792,30', '30,30,,30,,,,30,30,,,,30,,30,30,30,30,30,30,30,,,,,30,30,30,30,30,30', '30,,,,,,,,,,30,,,30,30,30,30,30,30,30,30,30,30,,30,30,,30,30,30,,,,', ',,,,,,,,,,,,,,,30,,,30,30,,30,30,,,30,,30,,30,,30,,,,,,,,30,,,,,30,30', '30,30,30,30,,,,30,30,797,797,797,,797,,,,797,797,,,,797,,797,797,797', '797,797,797,797,,,,,797,797,797,797,797,797,797,,,,,,,,,,797,,,797,797', '797,797,797,797,797,797,797,797,,797,797,,797,797,797,,,,,,,,,,,,,,', ',,,,,797,,,797,,,797,797,,,797,,,,,,797,,,,,,,,797,,,,,797,797,797,797', '797,797,,,,797,797,31,31,31,,31,,,,31,31,,,,31,,31,31,31,31,31,31,31', ',,,,31,31,31,31,31,31,31,,,,,,,,,,31,,,31,31,31,31,31,31,31,31,31,31', ',31,31,,31,31,31,,,,,,,,,,,,,,,,,,,,31,,,31,31,,31,31,,,31,,31,,31,', '31,,,,,,,,31,,,,,31,31,31,31,31,31,,,,31,31,799,799,799,,799,,,,799', '799,,,,799,,799,799,799,799,799,799,799,,,,,799,799,799,799,799,799', '799,,,,,,,,,,799,,,799,799,799,799,799,799,799,799,799,799,,799,799', ',799,799,799,,,,,,,,,,,,,,,,,,,,799,,,799,,,799,799,,,799,,,,,,799,', ',,,,,,799,,,,,799,799,799,799,799,799,,,,799,799,272,272,272,,272,,', ',272,272,,,,272,,272,272,272,272,272,272,272,,,,,272,272,272,272,272', '272,272,,,,,,,,,,272,,,272,272,272,272,272,272,272,272,272,272,,272', '272,,,,272,,,,,,,,,,,,,,,,,,,,272,,,272,,,272,272,,,272,,,,,,,,,,,,', ',,,,,,272,272,272,272,272,272,,,,272,272,810,810,810,,810,,,,810,810', ',,,810,,810,810,810,810,810,810,810,,,,,810,810,810,810,810,810,810', ',,,,,,,,,810,,,810,810,810,810,810,810,810,810,810,810,,810,810,,,,810', ',,,,,,,,,,,,,,,,,,,810,,,810,,,810,810,,,810,,,,,,,,,,,,,,,,,,,810,810', '810,810,810,810,,,,810,810,818,818,818,,818,,,,818,818,,,,818,,818,818', '818,818,818,818,818,,,,,818,818,818,818,818,818,818,,,,,,,,,,818,,,818', '818,818,818,818,818,818,818,818,818,,818,818,,818,818,818,,,,,,,,,,', ',,,,,,,,,818,,,818,,,818,818,,,818,,818,,,,818,,,,,,,,818,,,,,818,818', '818,818,818,818,,,,818,818,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34', '34,34,34,,,,,34,34,34,34,34,34,34,,,,,,,,,,34,,,34,34,34,34,34,34,34', '34,34,34,,34,34,,,,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,', ',,,,,,,,,,,,,,34,34,34,34,34,34,,,,34,34,35,35,35,,35,,,,35,35,,,,35', ',35,35,35,35,35,35,35,,,,,35,35,35,35,35,35,35,,,,,,,,,,35,,,35,35,35', '35,35,35,35,35,35,35,,35,35,,,,35,,,,,,,,,,,,,,,,,,,,35,,,35,,,35,35', ',,35,,,,,,,,,,,,,,,,,,,35,35,35,35,35,35,,,,35,35,10,10,10,10,10,10', '10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,,,10,10,10,10', '10,10,10,10,10,10,,,,,,10,10,10,10,10,10,10,10,,,10,,,,,,,,10,10,,10', '10,10,10,,10,10,,,10,,,,,10,10,10,10,,,,,,,,,,,,,,10,10,,10,10,10,10', '10,10,10,10,10,,10,,,10,10,,,841,841,841,,841,,,10,841,841,,,,841,,841', '841,841,841,841,841,841,,,,,841,841,841,841,841,841,841,,,,,,,,,,841', ',,841,841,841,841,841,841,841,841,841,841,,841,841,,,,841,,,,,,,,,,', ',,,,,,,,,841,,,841,,,841,841,,,841,,,,,,,,,,,,,,,,,,,841,841,841,841', '841,841,,,,841,841,843,843,843,,843,,,,843,843,,,,843,,843,843,843,843', '843,843,843,,,,,843,843,843,843,843,843,843,,,,,,,,,,843,,,843,843,843', '843,843,843,843,843,843,843,,843,843,,843,843,843,,,,,,,,,,,,,,,,,,', ',843,,,843,,,843,843,,,843,,843,,,,843,,,,,,,,843,,,,,843,843,843,843', '843,843,,,,843,843,848,848,848,,848,,,,848,848,,,,848,,848,848,848,848', '848,848,848,,,,,848,848,848,848,848,848,848,,,,,,,,,,848,,,848,848,848', '848,848,848,848,848,848,848,,848,848,,,,848,,,,,,,,,,,,,,,,,,,,848,', ',848,,,848,848,,,848,,,,,,,,,,,,,,,,,,,848,848,848,848,848,848,,,,848', '848,853,853,853,,853,,,,853,853,,,,853,,853,853,853,853,853,853,853', ',,,,853,853,853,853,853,853,853,,,,,,,,,,853,,,853,853,853,853,853,853', '853,853,853,853,,853,853,,853,853,853,,,,,,,,,,,,,,,,,,,,853,,,853,', ',853,853,,,853,,853,,853,,853,,,,,,,,853,,,,,853,853,853,853,853,853', ',,,853,853,856,856,856,,856,,,,856,856,,,,856,,856,856,856,856,856,856', '856,,,,,856,856,856,856,856,856,856,,,,,,,,,,856,,,856,856,856,856,856', '856,856,856,856,856,,856,856,,856,856,856,,,,,,,,,,,,,,,,,,,,856,,,856', ',,856,856,,,856,,856,,856,,856,,,,,,,,856,,,,,856,856,856,856,856,856', ',,,856,856,867,867,867,,867,,,,867,867,,,,867,,867,867,867,867,867,867', '867,,,,,867,867,867,867,867,867,867,,,,,,,,,,867,,,867,867,867,867,867', '867,867,867,867,867,,867,867,,867,867,867,,,,,,,,,,,,,,,,,,,,867,,,867', ',,867,867,,,867,,,,,,867,,,,,,,,867,,,,,867,867,867,867,867,867,,,,867', '867,41,41,41,,41,,,,41,41,,,,41,,41,41,41,41,41,41,41,,,,,41,41,41,41', '41,41,41,,,,,,,,,,41,,,41,41,41,41,41,41,41,41,41,41,,41,41,,41,41,41', ',,,,,,,,,,,,,,,,,,,41,,,41,,,41,41,,,41,,,,,,41,,,,,,,,41,,,,,41,41', '41,41,41,41,,,,41,41,293,293,293,,293,,,,293,293,,,,293,,293,293,293', '293,293,293,293,,,,,293,293,293,293,293,293,293,,,,,,,,,,293,,,293,293', '293,293,293,293,293,293,293,293,,293,293,,293,293,293,,,,,,,,,,,,,,', ',,,,,293,,,293,293,,293,293,,,293,,,,,,293,,,,,,,,293,,,,,293,293,293', '293,293,293,,,,293,293,887,887,887,,887,,,,887,887,,,,887,,887,887,887', '887,887,887,887,,,,,887,887,887,887,887,887,887,,,,,,,,,,887,,,887,887', '887,887,887,887,887,887,887,887,,887,887,,,,887,,,,,,,,,,,,,,,,,,,,887', ',,887,,,887,887,,,887,,,,,,,,,,,,,,,,,,,887,887,887,887,887,887,,,,887', '887,891,891,891,,891,,,,891,891,,,,891,,891,891,891,891,891,891,891', ',,,,891,891,891,891,891,891,891,,,,,,,,,,891,,,891,891,891,891,891,891', '891,891,891,891,,891,891,,891,891,891,,,,,,,,,,,,,,,,,,,,891,,,891,', ',891,891,,,891,,,,,,891,,,,,,,,891,,,,,891,891,891,891,891,891,,,,891', '891,894,894,894,,894,,,,894,894,,,,894,,894,894,894,894,894,894,894', ',,,,894,894,894,894,894,894,894,,,,,,,,,,894,,,894,894,894,894,894,894', '894,894,894,894,,894,894,,894,894,894,,,,,,,,,,,,,,,,,,,,894,,,894,', ',894,894,,,894,,,,,,894,,,,,,,,894,,,,,894,894,894,894,894,894,,,,894', '894,42,42,42,,42,,,,42,42,,,,42,,42,42,42,42,42,42,42,,,,,42,42,42,42', '42,42,42,,,,,,,,,,42,,,42,42,42,42,42,42,42,42,42,42,,42,42,,42,42,42', ',,,,,,,,,,,,,,,,,,,42,,,42,,,42,42,,,42,,,,,,42,,,,,,,,42,,,,,42,42', '42,42,42,42,,,,42,42,301,301,301,,301,,,,301,301,,,,301,,301,301,301', '301,301,301,301,,,,,301,301,301,301,301,301,301,,,,,,,,,,301,,,301,301', '301,301,301,301,301,301,301,301,,301,301,,301,301,301,,,,,,,,,,,,,,', ',,,,,301,,,301,,,301,301,,,301,,,,,,301,,,,,,,,301,,,,,301,301,301,301', '301,301,,,,301,301,43,43,43,,43,,,,43,43,,,,43,,43,43,43,43,43,43,43', ',,,,43,43,43,43,43,43,43,,,,,,,,,,43,,,43,43,43,43,43,43,43,43,43,43', ',43,43,,43,43,43,,,,,,,,,,,,,,,,,,,,43,,,43,,,43,43,,,43,,,,,,43,,,', ',,,,43,,,,,43,43,43,43,43,43,,,,43,43,907,907,907,,907,,,,907,907,,', ',907,,907,907,907,907,907,907,907,,,,,907,907,907,907,907,907,907,,', ',,,,,,,907,,,907,907,907,907,907,907,907,907,907,907,,907,907,,,,907', ',,,,,,,,,,,,,,,,,,,907,,,907,,,907,907,,,907,,,,,,,,,,,,,,,,,,,907,907', '907,907,907,907,,,,907,907,303,303,303,,303,,,,303,303,,,,303,,303,303', '303,303,303,303,303,,,,,303,303,303,303,303,303,303,,,,,,,,,,303,,,303', '303,303,303,303,303,303,303,303,303,,303,303,,303,303,303,,,,,,,,,,', ',,,,,,,,,303,,,303,,,303,303,,,303,,,,,,303,,,,,,,,303,,,,,303,303,303', '303,303,303,,,,303,303,912,912,912,,912,,,,912,912,,,,912,,912,912,912', '912,912,912,912,,,,,912,912,912,912,912,912,912,,,,,,,,,,912,,,912,912', '912,912,912,912,912,912,912,912,,912,912,,912,912,912,,,,,,,,,,,,,,', ',,,,,912,,,912,,,912,912,,,912,,912,,912,,912,,,,,,,,912,,,,,912,912', '912,912,912,912,,,,912,912,920,920,920,,920,,,,920,920,,,,920,,920,920', '920,920,920,920,920,,,,,920,920,920,920,920,920,920,,,,,,,,,,920,,,920', '920,920,920,920,920,920,920,920,920,,920,920,,,,920,,,,,,,,,,,,,,,,', ',,,920,,,920,,,920,920,,,920,,,,,,,,,,,,,,,,,,,920,920,920,920,920,920', ',,,920,920,923,923,923,,923,,,,923,923,,,,923,,923,923,923,923,923,923', '923,,,,,923,923,923,923,923,923,923,,,,,,,,,,923,,,923,923,923,923,923', '923,923,923,923,923,,923,923,,923,923,923,,,,,,,,,,,,,,,,,,,,923,,,923', ',,923,923,,,923,,,,,,923,,,,,,,,923,,,,,923,923,923,923,923,923,,,,923', '923,308,308,308,,308,,,,308,308,,,,308,,308,308,308,308,308,308,308', ',,,,308,308,308,308,308,308,308,,,308,,,,,,,308,,,308,308,308,308,308', '308,308,308,308,308,,308,308,,308,308,308,,,,,,,,,,,,,,,,,,,,308,,,308', ',,308,308,,,308,,,,,,308,,,,,,,,308,,,,,308,308,308,308,308,308,,,,308', '308,309,309,309,,309,,,,309,309,,,,309,,309,309,309,309,309,309,309', ',,,,309,309,309,309,309,309,309,,,309,,,,,,,309,,,309,309,309,309,309', '309,309,309,309,309,,309,309,,309,309,309,,,,,,,,,,,,,,,,,,,,309,,,309', ',,309,309,,,309,,,,,,309,,,,,,,,309,,,,,309,309,309,309,309,309,,,,309', '309,320,320,320,,320,,,,320,320,,,,320,,320,320,320,320,320,320,320', ',,,,320,320,320,320,320,320,320,,,,,,,,,,320,,,320,320,320,320,320,320', '320,320,320,320,,320,320,,,,320,,,,,,,,,,,,,,,,,,,,320,,,320,,,320,320', ',,320,,,,,,,,,,,,,,,,,,,320,320,320,320,320,320,,,,320,320,322,322,322', ',322,,,,322,322,,,,322,,322,322,322,322,322,322,322,,,,,322,322,322', '322,322,322,322,,,,,,,,,,322,,,322,322,322,322,322,322,322,322,322,322', ',322,322,,,,322,,,,,,,,,,,,,,,,,,,,322,,,322,,,322,322,,,322,,,,,,,', ',,,,,,,,,,,322,322,322,322,322,322,,,,322,322,55,55,55,,55,,,,55,55', ',,,55,,55,55,55,55,55,55,55,,,,,55,55,55,55,55,55,55,,,55,,,,,,,55,', ',55,55,55,55,55,55,55,55,55,55,,55,55,,55,55,55,,,,,,,,,,,,,,,,,,,,55', ',,55,,,55,55,,,55,,,,,,55,,,,,,,,55,,,,,55,55,55,55,55,55,,,,55,55,56', '56,56,,56,,,,56,56,,,,56,,56,56,56,56,56,56,56,,,,,56,56,56,56,56,56', '56,,,,,,,,,,56,,,56,56,56,56,56,56,56,56,56,56,,56,56,,56,56,56,,,,', ',,,,,,,,,,,,,,,56,,,56,,,56,56,,,56,,56,,,,56,,,,,,,,56,,,,,56,56,56', '56,56,56,,,,56,56,361,361,361,361,361,361,361,361,361,361,361,361,361', '361,361,361,361,361,361,361,361,361,361,361,,,361,361,361,361,361,361', '361,361,361,361,,,,,,361,361,361,361,361,361,361,361,,,361,,,,,,,,361', '361,,361,361,361,361,,361,361,,,361,,,,,361,361,361,361,,,,,,,,,,,,', ',361,361,,361,361,361,361,361,361,361,361,361,,361,,,361,361,,,59,59', '59,,59,,,361,59,59,,,,59,,59,59,59,59,59,59,59,,,,,59,59,59,59,59,59', '59,,,59,,,,,,,59,,,59,59,59,59,59,59,59,59,59,59,,59,59,,59,59,59,,', ',,,,,,,,,,,,,,,,,59,,,59,,,59,59,,,59,,,,,,59,,,,,,,,59,,,,,59,59,59', '59,59,59,,,,59,59,373,373,373,,373,,,,373,373,,,,373,,373,373,373,373', '373,373,373,,,,,373,373,373,373,373,373,373,,,,,,,,,,373,,,373,373,373', '373,373,373,373,373,373,373,,373,373,,373,373,373,,,,,,,,,,,,,,,,,,', ',373,,,373,,,373,373,,,373,,,,,,373,,,,,,,,373,,,,,373,373,373,373,373', '373,,,,373,373,60,60,60,,60,,,,60,60,,,,60,,60,60,60,60,60,60,60,,,', ',60,60,60,60,60,60,60,,,60,,,,,,,60,,,60,60,60,60,60,60,60,60,60,60', ',60,60,,60,60,60,,,,,,,,,,,,,,,,,,,,60,,,60,,,60,60,,,60,,,,,,60,,,', ',,,,60,,,,,60,60,60,60,60,60,,,,60,60,382,382,382,,382,,,,382,382,,', ',382,,382,382,382,382,382,382,382,,,,,382,382,382,382,382,382,382,,', ',,,,,,,382,,,382,382,382,382,382,382,382,382,382,382,,382,382,,382,382', '382,,,,,,,,,,,,,,,,,,,,382,,,382,382,,382,382,,,382,,382,,382,,382,', ',,,,,,382,,,,,382,382,382,382,382,382,,,,382,382,64,64,64,,64,,,,64', '64,,,,64,,64,64,64,64,64,64,64,,,,,64,64,64,64,64,64,64,,,,,,,,,,64', ',,64,64,64,64,64,64,64,64,64,64,,64,64,,,,64,,,,,,,,,,,,,,,,,,,,64,', ',64,,,64,64,,,64,,64,,,,,,,,,,,,,,,,,64,64,64,64,64,64,,,,64,64,389', '389,389,,389,,,,389,389,,,,389,,389,389,389,389,389,389,389,,,,,389', '389,389,389,389,389,389,,,,,,,,,,389,,,389,389,389,389,389,389,389,389', '389,389,,389,389,,389,389,389,,,,,,,,,,,,,,,,,,,,389,,,389,389,,389', '389,,,389,,389,,389,,389,,,,,,,,389,,,,,389,389,389,389,389,389,,,,389', '389,390,390,390,,390,,,,390,390,,,,390,,390,390,390,390,390,390,390', ',,,,390,390,390,390,390,390,390,,,,,,,,,,390,,,390,390,390,390,390,390', '390,390,390,390,,390,390,,390,390,390,,,,,,,,,,,,,,,,,,,,390,,,390,390', ',390,390,,,390,,390,,390,,390,,,,,,,,390,,,,,390,390,390,390,390,390', ',,,390,390,397,397,397,,397,,,,397,397,,,,397,,397,397,397,397,397,397', '397,,,,,397,397,397,397,397,397,397,,,,,,,,,,397,,,397,397,397,397,397', '397,397,397,397,397,,397,397,,397,397,397,,,,,,,,,,,,,,,,,,,,397,,,397', ',,397,397,,,397,,397,,,,397,,,,,,,,397,,,,,397,397,397,397,397,397,', ',,397,397,399,399,399,,399,,,,399,399,,,,399,,399,399,399,399,399,399', '399,,,,,399,399,399,399,399,399,399,,,,,,,,,,399,,,399,399,399,399,399', '399,399,399,399,399,,399,399,,399,399,399,,,,,,,,,,,,,,,,,,,,399,,,399', ',,399,399,,,399,,,,,,399,,,,,,,,399,,,,,399,399,399,399,399,399,,,,399', '399,400,400,400,,400,,,,400,400,,,,400,,400,400,400,400,400,400,400', ',,,,400,400,400,400,400,400,400,,,,,,,,,,400,,,400,400,400,400,400,400', '400,400,400,400,,400,400,,400,400,400,,,,,,,,,,,,,,,,,,,,400,,,400,', ',400,400,,,400,,,,,,400,,,,,,,,400,,,,,400,400,400,400,400,400,,,,400', '400,401,401,401,,401,,,,401,401,,,,401,,401,401,401,401,401,401,401', ',,,,401,401,401,401,401,401,401,,,,,,,,,,401,,,401,401,401,401,401,401', '401,401,401,401,,401,401,,401,401,401,,,,,,,,,,,,,,,,,,,,401,,,401,', ',401,401,,,401,,,,,,401,,,,,,,,401,,,,,401,401,401,401,401,401,,,,401', '401,8,8,8,8,8,,,,8,8,,,,8,,8,8,8,8,8,8,8,,,,,8,8,8,8,8,8,8,,,8,,,,,', '8,8,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8', '8,,,8,,8,,,,8,,,,,,,,8,,,,,8,8,8,8,8,8,,,,8,8,430,430,430,,430,,,,430', '430,,,,430,,430,430,430,430,430,430,430,,,,,430,430,430,430,430,430', '430,,,,,,,,,,430,,,430,430,430,430,430,430,430,430,430,430,,430,430', ',430,430,430,,,,,,,,,,,,,,,,,,,,430,,,430,,,430,430,,,430,,430,,430', ',430,,,,,,,,430,,,,,430,430,430,430,430,430,,,,430,430,433,433,433,', '433,,,,433,433,,,,433,,433,433,433,433,433,433,433,,,,,433,433,433,433', '433,433,433,,,,,,,,,,433,,,433,433,433,433,433,433,433,433,433,433,', '433,433,,433,433,433,,,,,,,,,,,,,,,,,,,,433,,,433,,,433,433,,,433,,433', ',433,,433,,,,,,,,433,,,,,433,433,433,433,433,433,,,,433,433,436,436', '436,,436,,,,436,436,,,,436,,436,436,436,436,436,436,436,,,,,436,436', '436,436,436,436,436,,,,,,,,,,436,,,436,436,436,436,436,436,436,436,436', '436,,436,436,,436,436,436,,,,,,,,,,,,,,,,,,,,436,,,436,,,436,436,,,436', ',,,,,436,,,,,,,,436,,,,,436,436,436,436,436,436,,,,436,436,445,445,445', ',445,,,,445,445,,,,445,,445,445,445,445,445,445,445,,,,,445,445,445', '445,445,445,445,,,445,,,,,,,445,,,445,445,445,445,445,445,445,445,445', '445,,445,445,,445,445,445,,,,,,,,,,,,,,,,,,,,445,,,445,,,445,445,,,445', ',445,,445,,445,,,,,,,,445,,,,,445,445,445,445,445,445,,,,445,445,85', '85,85,,85,,,,85,85,,,,85,,85,85,85,85,85,85,85,,85,,,85,85,85,85,85', '85,85,,,,,,,,,,85,,,85,85,85,85,85,85,85,85,85,85,,85,85,,85,85,85,', ',,,,,,,,,,,,,,,,,,85,,,85,85,,85,85,,,85,,85,,85,,85,,,,,,,,85,,85,', ',85,85,85,85,85,85,,,,85,85,88,88,88,,88,,,,88,88,,,,88,,88,88,88,88', '88,88,88,,88,,,88,88,88,88,88,88,88,,,,,,,,,,88,,,88,88,88,88,88,88', '88,88,88,88,,88,88,,88,88,88,,,,,,,,,,,,,,,,,,,,88,,,88,88,,88,88,,', '88,,88,,88,,88,,,,,,,,88,,88,,,88,88,88,88,88,88,,,,88,88,104,104,104', ',104,,,,104,104,,,,104,,104,104,104,104,104,104,104,,,,,104,104,104', '104,104,104,104,,,104,,,,,,,104,,,104,104,104,104,104,104,104,104,104', '104,,104,104,,104,104,104,,,,,,,,,,,,,,,,,,,,104,,,104,,,104,104,,,104', ',,,,,104,,,,,,,,104,,,,,104,104,104,104,104,104,,,,104,104,105,105,105', ',105,,,,105,105,,,,105,,105,105,105,105,105,105,105,,,,,105,105,105', '105,105,105,105,,,105,,,,,,,105,,,105,105,105,105,105,105,105,105,105', '105,,105,105,,105,105,105,,,,,,,,,,,,,,,,,,,,105,,,105,,,105,105,,,105', ',,,,,105,,,,,,,,105,,,,,105,105,105,105,105,105,,,,105,105,106,106,106', ',106,,,,106,106,,,,106,,106,106,106,106,106,106,106,,,,,106,106,106', '106,106,106,106,,,106,,,,,,,106,,,106,106,106,106,106,106,106,106,106', '106,,106,106,,106,106,106,,,,,,,,,,,,,,,,,,,,106,,,106,,,106,106,,,106', ',,,,,106,,,,,,,,106,,,,,106,106,106,106,106,106,,,,106,106,107,107,107', ',107,,,,107,107,,,,107,,107,107,107,107,107,107,107,,,,,107,107,107', '107,107,107,107,,,107,,,,,,,107,,,107,107,107,107,107,107,107,107,107', '107,,107,107,,107,107,107,,,,,,,,,,,,,,,,,,,,107,,,107,,,107,107,,,107', ',,,,,107,,,,,,,,107,,,,,107,107,107,107,107,107,,,,107,107,462,462,462', ',462,,,,462,462,,,,462,,462,462,462,462,462,462,462,,,,,462,462,462', '462,462,462,462,,,,,,,,,,462,,,462,462,462,462,462,462,462,462,462,462', ',462,462,,462,462,462,,,,,,,,,,,,,,,,,,,,462,,,462,,,462,462,,,462,', '462,,,,462,,,,,,,,462,,,,,462,462,462,462,462,462,,,,462,462,108,108', '108,108,108,,,,108,108,,,,108,,108,108,108,108,108,108,108,,,,,108,108', '108,108,108,108,108,,,108,,,,,,108,108,108,108,108,108,108,108,108,108', '108,108,108,108,,108,108,,108,108,108,,,,,,,,,,,,,,,,,,,,108,,,108,', ',108,108,,,108,,108,,,,108,,,,,,,,108,,,,,108,108,108,108,108,108,,', ',108,108,469,469,469,,469,,,,469,469,,,,469,,469,469,469,469,469,469', '469,,,,,469,469,469,469,469,469,469,,,,,,,,,,469,,,469,469,469,469,469', '469,469,469,469,469,,469,469,,469,469,469,,,,,,,,,,,,,,,,,,,,469,,,469', ',,469,469,,,469,,,,,,469,,,,,,,,469,,,,,469,469,469,469,469,469,,,,469', '469,470,470,470,,470,,,,470,470,,,,470,,470,470,470,470,470,470,470', ',,,,470,470,470,470,470,470,470,,,,,,,,,,470,,,470,470,470,470,470,470', '470,470,470,470,,470,470,,470,470,470,,,,,,,,,,,,,,,,,,,,470,,,470,', ',470,470,,,470,,,,,,470,,,,,,,,470,,,,,470,470,470,470,470,470,,,,470', '470,471,471,471,,471,,,,471,471,,,,471,,471,471,471,471,471,471,471', ',,,,471,471,471,471,471,471,471,,,,,,,,,,471,,,471,471,471,471,471,471', '471,471,471,471,,471,471,,471,471,471,,,,,,,,,,,,,,,,,,,,471,,,471,', ',471,471,,,471,,,,,,471,,,,,,,,471,,,,,471,471,471,471,471,471,,,,471', '471,475,475,475,,475,,,,475,475,,,,475,,475,475,475,475,475,475,475', ',,,,475,475,475,475,475,475,475,,,475,,,,,,,475,,,475,475,475,475,475', '475,475,475,475,475,,475,475,,475,475,475,,,,,,,,,,,,,,,,,,,,475,,,475', ',,475,475,,,475,,,,,,475,,,,,,,,475,,,,,475,475,475,475,475,475,,,,475', '475,481,481,481,,481,,,,481,481,,,,481,,481,481,481,481,481,481,481', ',,,,481,481,481,481,481,481,481,,,,,,,,,,481,,,481,481,481,481,481,481', '481,481,481,481,,481,481,,481,481,481,,,,,,,,,,,,,,,,,,,,481,,,481,', ',481,481,,,481,,481,,,,481,,,,,,,,481,,,,,481,481,481,481,481,481,,', ',481,481,484,484,484,,484,,,,484,484,,,,484,,484,484,484,484,484,484', '484,,,,,484,484,484,484,484,484,484,,,,,,,,,,484,,,484,484,484,484,484', '484,484,484,484,484,,484,484,,484,484,484,,,,,,,,,,,,,,,,,,,,484,,,484', ',,484,484,,,484,,,,,,484,,,,,,,,484,,,,,484,484,484,484,484,484,,,,484', '484,191,191,191,,191,,,,191,191,,,,191,,191,191,191,191,191,191,191', ',,,,191,191,191,191,191,191,191,,,,,,,,,,191,,,191,191,191,191,191,191', '191,191,191,191,,191,191,,191,191,191,,,,,,,,,,,,,,,,,,,,191,,,191,', ',191,191,,,191,,191,,,,191,,,,,,,,191,,,,,191,191,191,191,191,191,,', ',191,191,192,192,192,,192,,,,192,192,,,,192,,192,192,192,192,192,192', '192,,,,,192,192,192,192,192,192,192,,,,,,,,,,192,,,192,192,192,192,192', '192,192,192,192,192,,192,192,,192,192,192,,,,,,,,,,,,,,,,,,,,192,,,192', ',,192,192,,,192,,192,,,,192,,,,,,,,192,,,,,192,192,192,192,192,192,', ',,192,192,502,502,502,,502,,,,502,502,,,,502,,502,502,502,502,502,502', '502,,,,,502,502,502,502,502,502,502,,,,,,,,,,502,,,502,502,502,502,502', '502,502,502,502,502,,502,502,,502,502,502,,,,,,,,,,,,,,,,,,,,502,,,502', ',,502,502,,,502,,502,,,,502,,,,,,,,502,,,,,502,502,502,502,502,502,', ',,502,502,514,514,514,,514,,,,514,514,,,,514,,514,514,514,514,514,514', '514,,,,,514,514,514,514,514,514,514,,,514,,,,,,,514,,,514,514,514,514', '514,514,514,514,514,514,,514,514,,514,514,514,,,,,,,,,,,,,,,,,,,,514', ',,514,,,514,514,,,514,,,,,,514,,,,,,,,514,,,,,514,514,514,514,514,514', ',,,514,514,520,520,520,,520,,,,520,520,,,,520,,520,520,520,520,520,520', '520,,,,,520,520,520,520,520,520,520,,,520,,,,,,,520,,,520,520,520,520', '520,520,520,520,520,520,,520,520,,520,520,520,,,,,,,,,,,,,,,,,,,,520', ',,520,,,520,520,,,520,,,,,,520,,,,,,,,520,,,,,520,520,520,520,520,520', ',,,520,520,193,193,193,,193,,,,193,193,,,,193,,193,193,193,193,193,193', '193,,,,,193,193,193,193,193,193,193,,,,,,,,,,193,,,193,193,193,193,193', '193,193,193,193,193,,193,193,,193,193,193,,,,,,,,,,,,,,,,,,,,193,,,193', ',,193,193,,,193,,,,,,193,,,,,,,,193,,,,,193,193,193,193,193,193,,,,193', '193,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538', '538,538,538,538,538,538,538,538,,,538,538,538,538,538,538,538,538,538', '538,,,,,,538,538,538,538,538,538,538,538,,,538,,,,,,,,538,538,,538,538', '538,538,,538,538,,,538,,,,,538,538,538,538,,,,,,,,,,,,,,538,538,,538', '538,538,538,538,538,538,538,538,,538,,,538,538,,,194,194,194,,194,,', '538,194,194,,,,194,,194,194,194,194,194,194,194,,,,,194,194,194,194', '194,194,194,,,,,,,,,,194,,,194,194,194,194,194,194,194,194,194,194,', '194,194,,194,194,194,,,,,,,,,,,,,,,,,,,,194,,,194,,,194,194,,,194,,194', ',,,194,,,,,,,,194,,,,,194,194,194,194,194,194,,,,194,194,541,541,541', ',541,,,,541,541,,,,541,,541,541,541,541,541,541,541,,,,,541,541,541', '541,541,541,541,,,,,,,,,,541,,,541,541,541,541,541,541,541,541,541,541', ',541,541,,541,541,541,,,,,,,,,,,,,,,,,,,,541,,,541,,,541,541,,,541,', ',,,,541,,,,,,,,541,,,,,541,541,541,541,541,541,,,,541,541,542,542,542', ',542,,,,542,542,,,,542,,542,542,542,542,542,542,542,,,,,542,542,542', '542,542,542,542,,,,,,,,,,542,,,542,542,542,542,542,542,542,542,542,542', ',542,542,,542,542,542,,,,,,,,,,,,,,,,,,,,542,,,542,,,542,542,,,542,', '542,,,,542,,,,,,,,542,,,,,542,542,542,542,542,542,,,,542,542,545,545', '545,,545,,,,545,545,,,,545,,545,545,545,545,545,545,545,,,,,545,545', '545,545,545,545,545,,,,,,,,,,545,,,545,545,545,545,545,545,545,545,545', '545,,545,545,,545,545,545,,,,,,,,,,,,,,,,,,,,545,,,545,,,545,545,,,545', ',,,,,545,,,,,,,,545,,,,,545,545,545,545,545,545,,,,545,545,546,546,546', ',546,,,,546,546,,,,546,,546,546,546,546,546,546,546,,,,,546,546,546', '546,546,546,546,,,,,,,,,,546,,,546,546,546,546,546,546,546,546,546,546', ',546,546,,546,546,546,,,,,,,,,,,,,,,,,,,,546,,,546,,,546,546,,,546,', ',,,,546,,,,,,,,546,,,,,546,546,546,546,546,546,,,,546,546,551,551,551', ',551,,,,551,551,,,,551,,551,551,551,551,551,551,551,,,,,551,551,551', '551,551,551,551,,,,,,,,,,551,,,551,551,551,551,551,551,551,551,551,551', ',551,551,,551,551,551,,,,,,,,,,,,,,,,,,,,551,,,551,,,551,551,,,551,', ',,,,551,,,,,,,,551,,,,,551,551,551,551,551,551,,,,551,551,554,554,554', ',554,,,,554,554,,,,554,,554,554,554,554,554,554,554,,,,,554,554,554', '554,554,554,554,,,,,,,,,,554,,,554,554,554,554,554,554,554,554,554,554', ',554,554,,554,554,554,,,,,,,,,,,,,,,,,,,,554,,,554,,,554,554,,,554,', ',,,,554,,,,,,,,554,,,,,554,554,554,554,554,554,,,,554,554,197,197,197', ',197,,,,197,197,,,,197,,197,197,197,197,197,197,197,,,,,197,197,197', '197,197,197,197,,,,,,,,,,197,,,197,197,197,197,197,197,197,197,197,197', ',197,197,,197,197,197,,,,,,,,,,,,,,,,,,,,197,,,197,,,197,197,,,197,', ',,,,197,,,,,,,,197,,,,,197,197,197,197,197,197,,,,197,197,561,561,561', ',561,,,,561,561,,,,561,,561,561,561,561,561,561,561,,,,,561,561,561', '561,561,561,561,,,,,,,,,,561,,,561,561,561,561,561,561,561,561,561,561', ',561,561,,561,561,561,,,,,,,,,,,,,,,,,,,,561,,,561,,,561,561,,,561,', ',,,,561,,,,,,,,561,,,,,561,561,561,561,561,561,,,,561,561,563,563,563', ',563,,,,563,563,,,,563,,563,563,563,563,563,563,563,,,,,563,563,563', '563,563,563,563,,,,,,,,,,563,,,563,563,563,563,563,563,563,563,563,563', ',563,563,,,,563,,,,,,,,,,,,,,,,,,,,563,,,563,,,563,563,,,563,,563,,563', ',,,,,,,,563,,,,,,563,563,563,563,563,563,,,,563,563,566,566,566,,566', ',,,566,566,,,,566,,566,566,566,566,566,566,566,,,,,566,566,566,566,566', '566,566,,,,,,,,,,566,,,566,566,566,566,566,566,566,566,566,566,,566', '566,,566,566,566,,,,,,,,,,,,,,,,,,,,566,,,566,,,566,566,,,566,,,,,,566', ',,,,,,,566,,,,,566,566,566,566,566,566,,,,566,566,198,198,198,,198,', ',,198,198,,,,198,,198,198,198,198,198,198,198,,,,,198,198,198,198,198', '198,198,,,198,,,,,,,198,,,198,198,198,198,198,198,198,198,198,198,,198', '198,,198,198,198,,,,,,,,,,,,,,,,,,,,198,,,198,,,198,198,,,198,,,,,,198', ',,,,,,,198,,,,,198,198,198,198,198,198,,,,198,198,199,199,199,,199,', ',,199,199,,,,199,,199,199,199,199,199,199,199,,,,,199,199,199,199,199', '199,199,,,199,,,,,,,199,,,199,199,199,199,199,199,199,199,199,199,,199', '199,,199,199,199,,,,,,,,,,,,,,,,,,,,199,,,199,,,199,199,,,199,,,,,,199', ',,,,,,,199,,,,,199,199,199,199,199,199,,,,199,199,570,570,570,,570,', ',,570,570,,,,570,,570,570,570,570,570,570,570,,,,,570,570,570,570,570', '570,570,,,,,,,,,,570,,,570,570,570,570,570,570,570,570,570,570,,570', '570,,570,570,570,,,,,,,,,,,,,,,,,,,,570,,,570,,,570,570,,,570,,,,,,570', ',,,,,,,570,,,,,570,570,570,570,570,570,,,,570,570,20,20,20,,20,,,,20', '20,,,,20,,20,20,20,20,20,20,20,,,,,20,20,20,20,20,20,20,,,20,,,,,,,20', ',,20,20,20,20,20,20,20,20,20,20,,20,20,,20,20,20,,,,,,,,,,,,,,,,,,,', '20,,,20,,,20,20,,,20,,,,,,20,,,,,,,,20,,,,,20,20,20,20,20,20,,,,20,20', '584,584,584,,584,,,,584,584,,,,584,,584,584,584,584,584,584,584,,,,', '584,584,584,584,584,584,584,,,,,,,,,,584,,,584,584,584,584,584,584,584', '584,584,584,,584,584,,584,584,584,,,,,,,,,,,,,,,,,,,,584,,,584,,,584', '584,,,584,,,,,,584,,,,,,,,584,,,,,584,584,584,584,584,584,,,,584,584', '21,21,21,,21,,,,21,21,,,,21,,21,21,21,21,21,21,21,,,,,21,21,21,21,21', '21,21,,,,,,,,,,21,,,21,21,21,21,21,21,21,21,21,21,,21,21,,21,21,21,', ',,,,,,,,,,,,,,,,,,21,,,21,,,21,21,,,21,,,,,,21,,,,,,,,21,,,,,21,21,21', '21,21,21,,,,21,21,595,595,595,,595,,,,595,595,,,,595,,595,595,595,595', '595,595,595,,,,,595,595,595,595,595,595,595,,,,,,,,,,595,,,595,595,595', '595,595,595,595,595,595,595,,595,595,,595,595,595,,,,,,,,,,,,,,,,,,', ',595,,,595,,,595,595,,,595,,595,,595,,595,,,,,,,,595,,,,,595,595,595', '595,595,595,,,,595,595,210,210,210,,210,,,,210,210,,,,210,,210,210,210', '210,210,210,210,,,,,210,210,210,210,210,210,210,,,,,,,,,,210,,,210,210', '210,210,210,210,210,210,210,210,,210,210,,210,210,210,,,,,,,,,,,,,,', ',,,,,210,,,210,,,210,210,,,210,,,,,,210,,,,,,,,210,,,,,210,210,210,210', '210,210,,,,210,210,211,211,211,,211,,,,211,211,,,,211,,211,211,211,211', '211,211,211,,,,,211,211,211,211,211,211,211,,,,,,,,,,211,,,211,211,211', '211,211,211,211,211,211,211,,211,211,,211,211,211,,,,,,,,,,,,,,,,,,', ',211,,,211,,,211,211,,,211,,,,,,211,,,,,,,,211,,,,,211,211,211,211,211', '211,,,,211,211,212,212,212,,212,,,,212,212,,,,212,,212,212,212,212,212', '212,212,,,,,212,212,212,212,212,212,212,,,,,,,,,,212,,,212,212,212,212', '212,212,212,212,212,212,,212,212,,212,212,212,,,,,,,,,,,,,,,,,,,,212', ',,212,,,212,212,,,212,,,,,,212,,,,,,,,212,,,,,212,212,212,212,212,212', ',,,212,212,213,213,213,,213,,,,213,213,,,,213,,213,213,213,213,213,213', '213,,,,,213,213,213,213,213,213,213,,,,,,,,,,213,,,213,213,213,213,213', '213,213,213,213,213,,213,213,,213,213,213,,,,,,,,,,,,,,,,,,,,213,,,213', ',,213,213,,,213,,,,,,213,,,,,,,,213,,,,,213,213,213,213,213,213,,,,213', '213,214,214,214,,214,,,,214,214,,,,214,,214,214,214,214,214,214,214', ',,,,214,214,214,214,214,214,214,,,,,,,,,,214,,,214,214,214,214,214,214', '214,214,214,214,,214,214,,214,214,214,,,,,,,,,,,,,,,,,,,,214,,,214,', ',214,214,,,214,,,,,,214,,,,,,,,214,,,,,214,214,214,214,214,214,,,,214', '214,611,611,611,,611,,,,611,611,,,,611,,611,611,611,611,611,611,611', ',,,,611,611,611,611,611,611,611,,,,,,,,,,611,,,611,611,611,611,611,611', '611,611,611,611,,611,611,,611,611,611,,,,,,,,,,,,,,,,,,,,611,,,611,', ',611,611,,,611,,611,,,,611,,,,,,,,611,,,,,611,611,611,611,611,611,,', ',611,611,215,215,215,,215,,,,215,215,,,,215,,215,215,215,215,215,215', '215,,,,,215,215,215,215,215,215,215,,,,,,,,,,215,,,215,215,215,215,215', '215,215,215,215,215,,215,215,,215,215,215,,,,,,,,,,,,,,,,,,,,215,,,215', ',,215,215,,,215,,,,,,215,,,,,,,,215,,,,,215,215,215,215,215,215,,,,215', '215,614,614,614,,614,,,,614,614,,,,614,,614,614,614,614,614,614,614', ',,,,614,614,614,614,614,614,614,,,,,,,,,,614,,,614,614,614,614,614,614', '614,614,614,614,,614,614,,614,614,614,,,,,,,,,,,,,,,,,,,,614,,,614,', ',614,614,,,614,,,,,,614,,,,,,,,614,,,,,614,614,614,614,614,614,,,,614', '614,617,617,617,,617,,,,617,617,,,,617,,617,617,617,617,617,617,617', ',,,,617,617,617,617,617,617,617,,,,,,,,,,617,,,617,617,617,617,617,617', '617,617,617,617,,617,617,,617,617,617,,,,,,,,,,,,,,,,,,,,617,,,617,', ',617,617,,,617,,,,,,617,,,,,,,,617,,,,,617,617,617,617,617,617,,,,617', '617,216,216,216,,216,,,,216,216,,,,216,,216,216,216,216,216,216,216', ',,,,216,216,216,216,216,216,216,,,,,,,,,,216,,,216,216,216,216,216,216', '216,216,216,216,,216,216,,216,216,216,,,,,,,,,,,,,,,,,,,,216,,,216,', ',216,216,,,216,,,,,,216,,,,,,,,216,,,,,216,216,216,216,216,216,,,,216', '216,217,217,217,,217,,,,217,217,,,,217,,217,217,217,217,217,217,217', ',,,,217,217,217,217,217,217,217,,,,,,,,,,217,,,217,217,217,217,217,217', '217,217,217,217,,217,217,,217,217,217,,,,,,,,,,,,,,,,,,,,217,,,217,', ',217,217,,,217,,,,,,217,,,,,,,,217,,,,,217,217,217,217,217,217,,,,217', '217,218,218,218,,218,,,,218,218,,,,218,,218,218,218,218,218,218,218', ',,,,218,218,218,218,218,218,218,,,,,,,,,,218,,,218,218,218,218,218,218', '218,218,218,218,,218,218,,218,218,218,,,,,,,,,,,,,,,,,,,,218,,,218,', ',218,218,,,218,,,,,,218,,,,,,,,218,,,,,218,218,218,218,218,218,,,,218', '218,632,632,632,,632,,,,632,632,,,,632,,632,632,632,632,632,632,632', ',,,,632,632,632,632,632,632,632,,,,,,,,,,632,,,632,632,632,632,632,632', '632,632,632,632,,632,632,,632,632,632,,,,,,,,,,,,,,,,,,,,632,,,632,', ',632,632,,,632,,632,,,,632,,,,,,,,632,,,,,632,632,632,632,632,632,,', ',632,632,219,219,219,,219,,,,219,219,,,,219,,219,219,219,219,219,219', '219,,,,,219,219,219,219,219,219,219,,,,,,,,,,219,,,219,219,219,219,219', '219,219,219,219,219,,219,219,,219,219,219,,,,,,,,,,,,,,,,,,,,219,,,219', ',,219,219,,,219,,,,,,219,,,,,,,,219,,,,,219,219,219,219,219,219,,,,219', '219,638,638,638,,638,,,,638,638,,,,638,,638,638,638,638,638,638,638', ',,,,638,638,638,638,638,638,638,,,638,,,,,,,638,,,638,638,638,638,638', '638,638,638,638,638,,638,638,,638,638,638,,,,,,,,,,,,,,,,,,,,638,,,638', ',,638,638,,,638,,,,,,638,,,,,,,,638,,,,,638,638,638,638,638,638,,,,638', '638,643,643,643,,643,,,,643,643,,,,643,,643,643,643,643,643,643,643', ',,,,643,643,643,643,643,643,643,,,,,,,,,,643,,,643,643,643,643,643,643', '643,643,643,643,,643,643,,643,643,643,,,,,,,,,,,,,,,,,,,,643,,,643,', ',643,643,,,643,,643,,,,643,,,,,,,,643,,,,,643,643,643,643,643,643,,', ',643,643,220,220,220,,220,,,,220,220,,,,220,,220,220,220,220,220,220', '220,,,,,220,220,220,220,220,220,220,,,,,,,,,,220,,,220,220,220,220,220', '220,220,220,220,220,,220,220,,220,220,220,,,,,,,,,,,,,,,,,,,,220,,,220', ',,220,220,,,220,,,,,,220,,,,,,,,220,,,,,220,220,220,220,220,220,,,,220', '220,221,221,221,,221,,,,221,221,,,,221,,221,221,221,221,221,221,221', ',,,,221,221,221,221,221,221,221,,,,,,,,,,221,,,221,221,221,221,221,221', '221,221,221,221,,221,221,,221,221,221,,,,,,,,,,,,,,,,,,,,221,,,221,', ',221,221,,,221,,,,,,221,,,,,,,,221,,,,,221,221,221,221,221,221,,,,221', '221,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67,67', '67,67,,,67,67,67,67,67,67,67,67,67,67,,,,,,67,67,67,67,67,67,67,67,67', '67,67,67,,,,,,,67,67,,67,67,67,67,,67,67,,,67,,,,,67,67,67,67,,,,,,67', ',,,,,,,67,67,,67,67,67,67,67,67,67,67,67,,67,,,67,671,671,671,671,671', '671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671', '671,671,,,671,671,671,671,671,671,671,671,671,671,,,,,,671,671,671,671', '671,671,671,671,,,671,,,,,,,,671,671,,671,671,671,671,,671,671,,,671', ',,,,671,671,671,671,,,,,,,,,,,,,,671,671,,671,671,671,671,671,671,671', '671,671,,671,,,671,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81,81', '81,81,81,81,81,81,81,,,81,81,81,81,81,81,81,81,81,81,,,,,,81,81,81,81', '81,81,81,81,81,81,81,81,,,,,,,81,81,,81,81,81,81,,81,81,,,81,,,,,81', '81,81,81,,,,,,,,,,,,,,81,81,,81,81,81,81,81,81,81,81,81,,81,845,845', '81,,845,,,,,,,,845,845,,845,845,845,845,,845,845,,,845,,,,,845,845,845', '845,,,,,,,,,,,,,,845,845,,845,845,845,845,845,845,845,845,845,,845,844', '844,845,,844,,,,,,,,844,844,,844,844,844,844,,844,844,,,844,,,,,844', '844,844,844,,,,,,,,,,,,,,844,844,,844,844,844,844,844,844,844,844,844', ',844,196,196,844,,196,,,,,,,,196,196,,196,196,196,196,,196,196,,,196', ',,,,196,196,196,196,,,,,,,,,,,,,,196,196,,196,196,196,196,196,196,196', '196,196,,196,395,395,196,,395,,,,,,,,395,395,,395,395,395,395,,395,395', ',,395,,,,,395,395,395,395,,,,,,,,,,,,,,395,395,,395,395,395,395,395', '395,395,395,395,,395,396,396,395,,396,,,,,,,,396,396,,396,396,396,396', ',396,396,,,396,,,,,396,396,396,396,,,,,,,,,,,,,,396,396,,396,396,396', '396,396,396,396,396,396,,396,504,504,396,,504,,,,,,,,504,504,,504,504', '504,504,,504,504,,,504,,,,,504,504,504,504,,,,,,,,,,,,,,504,504,,504', '504,504,504,504,504,504,504,504,,504,503,503,504,,503,,,,,,,,503,503', ',503,503,503,503,,503,503,,,503,,,,,503,503,503,503,,,,,,,,,,,,,,503', '503,,503,503,503,503,503,503,503,503,503,,503,642,642,503,,642,,,,,', ',,642,642,,642,642,642,642,,642,642,,,642,,,,,642,642,642,642,,,,,,', ',,,,,,,642,642,,642,642,642,642,642,642,642,642,642,,642,594,594,642', ',594,,,,,,,,594,594,,594,594,594,594,,594,594,,,594,,,,,594,594,594', '594,,,,,,,,,,,,,,594,594,,594,594,594,594,594,594,594,594,594,,594,', ',594,850,850,850,850,850,850,850,850,850,850,850,,850,850,,,850,850', ',,,,,,,,,,,,,,850,,850,,850,850,850,850,850,850,850,,850,,,,,,,464,464', ',,464,,,,,850,,850,464,464,,464,464,464,464,,464,464,,,464,,,,,464,464', '464,464,,,,,,,,,,,,,,464,464,,464,464,464,464,464,464,464,464,464,,464', '593,593,464,,593,,,,,,,,593,593,,593,593,593,593,,593,593,,,593,,,,', '593,593,593,593,,,,,,,,,,,,,,593,593,,593,593,593,593,593,593,593,593', '593,,593,,,593,581,581,581,581,581,581,581,581,581,581,581,,581,581', ',,581,581,,,,581,,,,,,,,,,,581,,581,,581,581,581,581,581,581,581,,581', ',,,,,,644,644,,,644,,,,,581,,581,644,644,,644,644,644,644,,644,644,', ',644,,,,,644,644,644,644,,,,,,,,,,,,,,644,644,,644,644,644,644,644,644', '644,644,644,,644,254,254,644,,254,,,,,,,,254,254,,254,254,254,254,,254', '254,,,254,,,,,254,254,254,254,,,,,,,,,,,,,,254,254,,254,254,254,254', '254,254,254,254,254,,254,472,472,254,,472,,,,,,,,472,472,,472,472,472', '472,,472,472,,,472,,,,,472,472,472,472,,,,,,,,,,,,,,472,472,,472,472', '472,472,472,472,472,472,472,,472,473,473,472,,473,,,,,,,,473,473,,473', '473,473,473,,473,473,,,473,,,,,473,473,473,473,,,,,,,,,,,,,,473,473', ',473,473,473,473,473,473,473,473,473,,473,195,195,473,,195,,,,,,,,195', '195,,195,195,195,195,,195,195,,,195,,,,,195,195,195,195,,,,,,,,,,,,', ',195,195,,195,195,195,195,195,195,195,195,195,,195,255,255,195,,255', ',,,,,,,255,255,,255,255,255,255,,255,255,,,255,,,,,255,255,255,255,', ',,,,,,,,,,,,255,255,,255,255,255,255,255,255,255,255,255,,255,,,255', '427,427,427,427,427,427,427,427,427,427,427,,427,427,,,427,427,,,,,', ',,,,,,,,,427,,427,,427,427,427,427,427,427,427,,427,,378,378,378,378', '378,378,378,378,378,378,378,,378,378,427,427,378,378,,,,,,,,,,,,,,,378', ',378,,378,378,378,378,378,378,378,,378,392,392,392,392,392,392,392,392', '392,392,392,,392,392,,378,392,392,,,,,,,,,,,,,,,392,,392,,392,392,392', '392,392,392,392,,392,474,474,474,474,474,474,474,474,474,474,474,,474', '474,,392,474,474,,,,,,,,,,,,,,,474,,474,,474,474,474,474,474,474,474', ',474,692,692,692,692,692,692,692,692,692,692,692,,692,692,,474,692,692', ',,,,,,,,,,,,,,692,,692,,692,692,692,692,692,692,692,,692,22,22,22,22', '22,22,22,22,22,22,22,,22,22,,692,22,22,,,,,,,,,,,,,,,22,,22,,22,22,22', '22,22,22,22,,22,697,697,697,697,697,697,697,697,697,697,697,,697,697', ',22,697,697,,,,,,,,,,,,,,,697,,697,,697,697,697,697,697,697,697,,697', '685,685,685,685,685,685,685,685,685,685,685,,685,685,,697,685,685,,', ',,,,,,,,,,,,685,,685,,685,685,685,685,685,685,685,,685,734,734,734,734', '734,734,734,734,734,734,734,,734,734,,685,734,734,,,,,,,,,,,,,,,734', ',734,,734,734,734,734,734,734,734,,734,687,687,687,687,687,687,687,687', '687,687,687,,687,687,734,734,687,687,,,,,,,,,,,,,,,687,,687,,687,687', '687,687,687,687,687,,687,240,240,240,240,240,240,240,240,240,240,240', ',240,240,,687,240,240,,,,,,,,,,,,,,,240,,240,,240,240,240,240,240,240', '240,,240,485,485,485,485,485,485,485,485,485,485,485,,485,485,,240,485', '485,,,,,,,,,,,,,,,485,,485,,485,485,485,485,485,485,485,,485,779,779', '779,779,779,779,779,779,779,779,779,,779,779,485,485,779,779,,,,,,,', ',,,,,,,779,,779,,779,779,779,779,779,779,779,,779,680,680,680,680,680', '680,680,680,680,680,680,,680,680,,779,680,680,,,,,,,,,,,,,,,680,,680', ',680,680,680,680,680,680,680,,680,690,690,690,690,690,690,690,690,690', '690,690,,690,690,,680,690,690,,,,,,,,,,,,,,,690,,690,,690,690,690,690', '690,690,690,,690,606,606,606,606,606,606,606,606,606,606,606,,606,606', ',690,606,606,,,,,,,,,,,,,,,606,,606,,606,606,606,606,606,606,606,,606', ',,,,,,,,,,,,,,,606' ] racc_action_check = arr = ::Array.new(25062, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_action_pointer = [ nil, 1096, 1941, 59, nil, 274, nil, 1119, 15371, 7772, 10789, nil, 2, 32, 42, 119, 759, 316, 452, nil, 20203, 20445, 24487, 185, nil, 7885, 8490, 8732, 165, 6, 9700, 9942, nil, 2917, 10547, 10668, nil, 98, 335, 185, 467, 11628, 12233, 12475, 137, 1007, nil, nil, nil, nil, nil, nil, nil, 250, nil, 13685, 13806, nil, 26, 14040, 14282, nil, nil, 836, 14524, 229, nil, 22865, nil, nil, nil, nil, nil, 58, nil, nil, nil, nil, nil, 186, 216, 23085, nil, nil, nil, 15976, nil, nil, 16097, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 963, nil, nil, nil, 16218, 16339, 16460, 16581, 16823, 1081, nil, 373, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 223, nil, 258, 1575, 17670, 17791, 18275, 18509, 24153, 23265, 19356, 19840, 19961, nil, 629, 126, 351, 157, 300, 368, 3405, nil, nil, 20687, 20808, 20929, 21050, 21171, 21413, 21776, 21897, 22018, 22260, 22623, 22744, 4868, 4989, 5110, 5231, 5352, 6078, 6320, 6441, 6683, 7046, 7167, 7288, 7409, 7530, 7651, nil, nil, nil, 24712, nil, 337, 341, 8127, nil, 8248, 385, nil, nil, nil, nil, nil, nil, 23973, 24213, 380, 8974, nil, 389, nil, nil, nil, 9337, nil, nil, 9458, 401, 3161, 405, 408, 378, 10184, 2795, 491, 485, 478, 380, 458, 425, -15, nil, 472, 475, nil, nil, 342, 500, 501, 597, nil, 516, nil, 11749, nil, 4381, 479, nil, 474, 211, 280, 12354, 506, 12717, nil, 466, 20, 31, 13201, 13322, 243, 404, 489, -13, 960, 566, 3, 598, nil, nil, 13443, nil, 13564, 254, 265, 282, 228, 229, -45, 230, 288, nil, 287, nil, nil, nil, nil, 179, nil, 188, nil, 154, 503, 175, nil, 504, -35, nil, 151, nil, nil, nil, nil, nil, 1114, nil, nil, nil, nil, nil, nil, 13927, nil, nil, nil, nil, 4259, 518, nil, nil, 836, nil, 503, 14161, nil, 505, nil, nil, 24307, 550, 135, 170, 14403, nil, nil, 125, 556, 0, nil, 14645, 14766, nil, 24352, nil, nil, 23325, 23385, 14887, -31, 15008, 15129, 15250, 1453, 1819, 87, -52, 581, 593, 604, 605, 2795, 377, 552, 1941, 2185, 2307, 1697, 1575, 2063, 715, 2429, 488, 2551, 690, 938, 963, 2673, 24261, 80, nil, 15492, nil, nil, 15613, 545, nil, 15734, 372, nil, nil, 599, nil, nil, nil, nil, 15855, nil, -46, -20, 594, 560, -28, 558, 658, 602, nil, 603, 568, nil, nil, nil, 618, 16702, 597, 23739, 598, 623, nil, nil, 16944, 17065, 17186, 24033, 24093, 24397, 17307, 705, 704, 592, nil, nil, 17428, nil, nil, 17549, 24757, nil, 155, 606, nil, 327, 2429, 716, nil, nil, 4015, 30, 52, 713, 722, 3649, nil, 17912, 23505, 23445, -7, nil, 340, 192, -25, nil, 839, nil, 14, 18033, nil, 1097, nil, nil, nil, 18154, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 125, nil, nil, nil, 612, nil, nil, 18396, 630, nil, 18630, 18751, nil, -80, 18872, 18993, 647, nil, nil, nil, 19114, 648, nil, 19235, 85, 90, 715, 488, 658, 1205, 19477, nil, 19598, nil, nil, 19719, 625, nil, 673, 20082, nil, 675, nil, 664, nil, nil, nil, nil, nil, -43, 23847, -64, 646, 20324, nil, 687, nil, nil, nil, nil, 709, 712, 23799, 23625, 20566, nil, -65, nil, 714, 116, 1, 720, 193, 539, 722, 24937, 760, 761, -30, 812, 21292, nil, 745, 21534, nil, nil, 21655, nil, nil, nil, 510, nil, 821, nil, nil, nil, nil, nil, 834, nil, 835, 22139, 756, -5, 21, 10, -4, 22381, nil, 632, nil, 23565, 22502, 23913, nil, nil, nil, 341, 402, 2551, 4625, 432, -36, 723, 726, 734, nil, nil, nil, nil, nil, 731, nil, nil, nil, nil, 813, nil, nil, 814, 22975, -33, 701, 4137, nil, nil, nil, nil, nil, 24847, 745, 5473, 5594, nil, 24577, nil, 24667, nil, nil, 24892, nil, 24442, 5715, 5836, 5957, 198, 24532, nil, 746, 1084, 6199, nil, 768, 3527, 749, nil, 6562, 750, nil, 6804, nil, 6925, 751, nil, 791, 2063, 2185, nil, nil, 794, 795, 34, 866, 712, nil, 888, nil, 3283, 789, 835, nil, nil, nil, 24622, 915, nil, 8006, 919, 3771, 3893, nil, nil, 805, 45, 8369, -6, 53, 334, 888, nil, 841, 4503, 8611, nil, 317, 936, 937, 824, nil, 1382, nil, 338, nil, nil, 87, 8853, nil, nil, nil, 866, nil, nil, nil, nil, nil, 845, nil, nil, 24802, 9095, 9216, 545, 569, 903, 574, 835, 874, nil, nil, 963, nil, 9579, nil, 3039, 850, nil, 9821, 851, 10063, nil, nil, 877, 979, 901, nil, 2673, nil, nil, -11, 10305, nil, nil, nil, 21, nil, 981, 989, 10426, 2307, nil, nil, nil, 990, 328, nil, nil, nil, 913, 877, 878, nil, nil, 879, 890, nil, nil, 1134, nil, nil, nil, 10902, 1205, 11023, 23205, 23145, 488, 926, 11144, nil, 23673, 935, nil, 11265, 921, nil, 11386, 922, nil, nil, nil, nil, 1819, nil, 1697, nil, nil, 11507, 223, 1453, nil, nil, 1331, nil, 296, nil, nil, nil, 4747, nil, 924, 957, 963, 314, 308, 357, 836, 11870, nil, nil, nil, 11991, 931, nil, 12112, nil, 1053, 499, nil, nil, nil, nil, 1063, 1064, 948, 1072, 986, 12596, 286, nil, 966, nil, 12838, 967, nil, nil, nil, nil, nil, nil, 12959, nil, nil, 13080, nil, nil, -71, nil ] racc_action_default = [ -1, -521, -520, -521, -2, -509, -5, -6, -521, -521, -521, -20, -521, -521, -521, -521, -521, -274, -34, -35, -521, -521, -40, -42, -43, -287, -324, -325, -47, -252, -372, -290, -61, -520, -65, -70, -71, -521, -450, -521, -521, -521, -521, -521, -511, -217, -267, -268, -269, -270, -271, -272, -273, -499, -276, -521, -520, -285, -293, -521, -521, -297, -300, -509, -521, -309, -316, -521, -326, -327, -395, -396, -397, -398, -399, -520, -402, -520, -520, -520, -520, -520, -429, -435, -436, -439, -440, -441, -442, -443, -444, -445, -446, -447, -448, -449, -452, -453, 928, -4, -510, -516, -517, -518, -521, -521, -521, -521, -521, -8, -9, -521, -96, -97, -98, -99, -100, -101, -102, -103, -104, -108, -109, -110, -111, -112, -113, -114, -115, -116, -117, -118, -119, -120, -121, -122, -123, -124, -125, -126, -127, -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, -168, -169, -170, -171, -172, -173, -14, -105, -521, -520, -521, -521, -521, -520, -521, -521, -521, -521, -521, -38, -521, -450, -521, -274, -521, -521, -520, -39, -209, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -521, -360, -363, -44, -218, -231, -520, -520, -521, -239, -521, -262, -287, -324, -325, -494, -45, -46, -521, -521, -53, -521, -292, -521, -373, -376, -59, -520, -371, -60, -521, -61, -520, -521, -521, -66, -68, -520, -75, -521, -521, -82, -290, -511, -366, -328, -372, -521, -69, -73, -282, -437, -438, -521, -194, -195, -210, -521, -512, -520, -278, -219, -511, -513, -513, -521, -521, -520, -294, -41, -521, -521, -521, -521, -509, -521, -510, -450, -521, -521, -274, -521, -340, -341, -521, -312, -521, -96, -97, -134, -135, -151, -156, -163, -166, -319, -521, -450, -488, -489, -400, -521, -415, -521, -417, -521, -521, -521, -407, -521, -521, -413, -521, -428, -430, -431, -432, -433, -7, -519, -15, -16, -17, -18, -19, -521, -11, -12, -13, -106, -520, -521, -23, -31, -174, -262, -521, -521, -24, -32, -33, -25, -176, -521, -500, -501, -520, -502, -503, -500, -252, -501, -370, -505, -506, -30, -183, -36, -37, -521, -521, -520, -282, -521, -521, -521, -184, -185, -186, -187, -188, -189, -190, -191, -196, -197, -198, -199, -200, -201, -202, -203, -204, -205, -206, -207, -208, -211, -212, -213, -214, -521, -520, -232, -521, -261, -234, -521, -520, -259, -521, -252, -500, -501, -252, -50, -54, -253, -254, -255, -367, -520, -520, -521, -511, -511, -520, -231, -521, -289, -521, -62, -280, -74, -67, -521, -520, -521, -521, -81, -521, -437, -438, -521, -521, -521, -521, -521, -215, -521, -387, -521, -511, -220, -221, -515, -514, -223, -515, -511, -284, -513, -521, -491, -513, -520, -329, -330, -331, -520, -521, -521, -521, -521, -520, -379, -520, -521, -521, -282, -306, -91, -92, -521, -94, -521, -274, -521, -521, -317, -468, -321, -507, -508, -521, -401, -416, -419, -420, -422, -403, -418, -404, -405, -406, -521, -409, -411, -412, -521, -434, -10, -521, -521, -22, -521, -521, -266, -283, -521, -521, -55, -229, -230, -368, -521, -57, -369, -521, -500, -501, -504, -281, -521, -174, -521, -356, -521, -358, -361, -521, -520, -260, -263, -521, -495, -521, -238, -521, -496, -48, -364, -49, -365, -520, -40, -521, -520, -521, -251, -521, -257, -374, -377, -225, -521, -521, -521, -521, -521, -288, -62, -72, -521, -500, -501, -520, -78, -80, -521, -182, -192, -193, -521, -520, -520, -277, -521, -521, -263, -224, -515, -493, -286, -492, -520, -332, -520, -298, -333, -334, -335, -301, -521, -304, -521, -521, -521, -500, -501, -504, -281, -521, -91, -92, -93, -521, -520, -521, -310, -454, -455, -521, -313, -520, -520, -468, -521, -487, -487, -487, -467, -469, -470, -471, -472, -473, -474, -477, -479, -480, -482, -483, -484, -521, -521, -511, -521, -520, -408, -410, -414, -107, -21, -175, -264, -521, -521, -27, -178, -28, -179, -56, -29, -180, -58, -181, -521, -521, -521, -283, -216, -342, -344, -354, -521, -357, -521, -520, -520, -236, -521, -520, -51, -521, -244, -521, -520, -256, -521, -520, -520, -226, -227, -520, -520, -511, -521, -76, -291, -520, -338, -520, -388, -520, -389, -390, -279, -511, -521, -336, -521, -521, -520, -520, -303, -305, -381, -521, -521, -283, -521, -91, -92, -95, -521, -520, -521, -457, -521, -521, -521, -511, -459, -521, -463, -521, -465, -466, -521, -521, -481, -485, -322, -521, -421, -424, -425, -426, -427, -521, -265, -26, -177, -521, -345, -83, -521, -521, -90, -353, -521, -355, -359, -521, -233, -521, -235, -520, -520, -241, -521, -520, -521, -250, -258, -521, -521, -521, -3, -520, -394, -339, -521, -521, -392, -222, -295, -521, -296, -521, -521, -521, -520, -383, -307, -283, -521, -521, -314, -318, -320, -521, -487, -487, -475, -486, -487, -521, -478, -476, -468, -490, -423, -343, -521, -350, -520, -521, -521, -89, -521, -521, -362, -520, -521, -240, -521, -520, -246, -521, -520, -375, -378, -228, -393, -520, -391, -520, -299, -302, -521, -520, -520, -311, -456, -520, -458, -521, -461, -462, -464, -520, -346, -349, -521, -521, -85, -87, -86, -88, -521, -352, -237, -52, -521, -520, -242, -521, -245, -387, -520, -382, -380, -384, -385, -521, -521, -487, -521, -521, -521, -84, -351, -520, -247, -521, -520, -386, -337, -308, -315, -460, -323, -521, -348, -243, -521, -248, -347, -520, -249 ] clist = [ '38,271,115,115,610,331,38,302,200,499,118,118,477,110,188,281,281,451', '103,350,491,495,657,241,241,241,651,243,243,243,99,38,274,274,735,242', '242,242,571,269,264,120,120,296,284,281,442,305,305,208,577,305,835', '579,298,522,109,369,376,673,115,532,313,624,628,333,726,267,245,245', '245,565,674,293,115,349,103,382,386,738,306,307,641,830,310,833,753', '758,311,571,588,589,305,305,305,305,829,513,38,515,239,252,253,339,341', '831,38,348,520,531,2,256,262,265,805,100,187,319,361,761,763,764,189', '580,794,356,357,358,359,538,587,480,483,443,586,715,437,440,334,488', '304,317,645,332,517,379,295,478,354,303,308,739,309,740,638,869,360', '320,657,752,514,755,872,322,835,650,516,671,837,699,703,428,704,447', '716,448,717,744,899,632,730,809,336,337,343,16,393,394,38,390,1,16,298', '346,771,,629,904,,,,372,372,201,201,38,,,201,201,201,,,,,750,16,275', '275,368,374,377,,709,,391,,,,,,,,,,,,,201,201,,,201,201,,,201,314,,676', ',,,281,13,241,,,,243,13,453,,,241,243,38,242,243,446,274,38,,452,456', ',242,382,386,461,,460,,16,,13,,201,201,201,201,16,264,38,875,876,305', '305,877,,245,281,267,281,,490,245,267,466,245,915,,571,487,821,,318', '571,333,618,333,,620,103,900,,,479,,496,497,,444,577,579,498,,688,450', ',,454,691,657,,,605,878,559,722,,,13,,115,605,,,,,13,,118,,38,537,,756', '757,918,,,,16,201,201,201,201,,,201,201,201,,,,605,,,390,16,,,120,,298', '553,,,432,,,,,,,,,,,,,,599,,,,,,,,,,,914,,,,,,,,567,296,,,,,,17,201', ',13,,,17,201,583,,201,,16,,633,,275,16,390,819,13,298,571,,609,547,', '390,,552,823,17,277,277,,,720,721,731,16,591,592,,,,,,,,585,38,,201', '201,38,,,,390,38,,298,316,649,511,,511,,613,672,625,625,,,,616,,,571', ',576,13,,578,862,605,13,646,,864,,698,115,,,,,,17,,118,,,678,,281,17', ',13,,16,,,,,,,,,,,,274,,,,,901,,,,120,,,684,686,,,,,689,201,,,,,,,,', '903,573,,,723,751,905,,567,,,,,,,,,,,,769,,,,,,553,,,13,,,372,,,,,305', '17,201,,,,,,,390,,,,,,298,743,,17,201,,,38,38,,,,,,,,,201,747,,754,', ',115,,759,,,,,,38,,16,,,,16,,,281,281,16,,201,,,,,,,,,,,,201,782,782', ',770,38,201,,17,,,,277,17,778,798,,38,38,,,,,795,,,706,,305,38,605,201', '201,,,17,,201,,,38,38,711,,305,,13,,,275,13,840,,38,804,13,796,,,,512', '814,512,625,,281,812,,,,,825,,,,,,824,,,,201,274,,,,,,,,828,,,,281,38', '4,882,,,,,,,,,17,38,,,,782,,,,,,,,,38,,,,201,281,281,270,,201,,,281', ',,,16,16,,,871,390,782,782,298,,,,,782,,,,,,,,,892,,16,,,38,791,38,', '793,,201,38,281,800,38,,,,,,38,,,,,,,783,783,782,,16,281,,,,,,,,,,,16', '16,281,13,13,,782,,,,,,16,,,,,,,782,,201,,16,16,,,13,,17,,,,17,,,16', '201,17,,,,,,15,,,,,,15,,852,786,788,855,,13,,,,,,,,275,,,,13,13,,,,', '15,,,16,,,13,367,,,,,,,,16,,13,13,783,,,,,270,,277,,16,,13,,889,,,,893', ',,895,,,,,,,,,,,783,783,201,,,,,783,,,,,,,,,,15,,,,16,13,16,911,15,', ',16,,,16,,,13,270,,16,863,,270,,922,,,924,783,13,,,,,,,,,,,927,,,,,17', '17,,783,,,879,880,,,,,,888,,,783,,,,,,,775,17,,,13,,13,,,,,13,,,13,', ',,,,13,15,,,,,,785,785,909,,17,,,,,,,15,,,,,17,17,,,539,,921,,,,,,17', ',,,,,,925,,,209,17,17,,240,240,240,,,,,,,,17,,,,,,290,291,292,,,,,,', ',,,,,15,240,,,,15,,,,277,,,,,,,,,,,,,17,,,,,15,,,,,,,17,,,,785,,,,,', ',,,17,,,,,,,,,,,,,,,,,,,,,,785,785,,,621,,,785,623,,,,,631,,,,,,,,17', ',17,,,,,17,15,,17,,,,,,17,,,,,,,,,785,,,,,,,,,,,,,,,,,,,,785,370,240', '378,240,,,392,,,,,,785,,,,,,,209,402,403,404,405,406,407,408,409,410', '411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427', ',,,,,,,240,,240,,,,,,,,,,,240,,,,,,240,,,240,,,,,,,,,,,,15,,,,15,,,', ',15,,,,,,474,,,,,,,,485,,240,,,,,,,,776,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',790,,,,,,,,,,,,802,803,,,,,,,,,,,808,,,,,,,,240,,,816,817,,,,,,,,,', ',,,,,,,,,,240,,392,560,378,,,,,,,,,,,,,,,,,,,,,,,,,,,,,240,851,,240', ',,240,15,15,,,,,861,,581,,,,,,,,,,,868,,,,,15,240,,,,,,,606,607,608', ',,,,,,,,,240,,,240,,,,,,,15,,,,,,,,896,,897,240,15,15,,902,,,,,,,,,15', ',,,,,,,,,,15,15,,,,,,,,,,,,15,,680,240,,,685,687,,,,,690,,,692,,,,,', ',697,,,,,240,,,,240,,,29,,,,,,29,,15,,,240,,,,,,,29,29,15,,240,29,29', '29,,,,,,29,,15,,,371,375,240,,,734,,,240,,,,,,,,,29,29,,,29,29,240,', '29,,,,,,,,,240,,,,,,15,,15,,,,,15,,,15,,,434,,435,15,,,,,,29,,,,29,29', '29,29,29,,,240,779,,,,,,,,,,685,687,690,,,,,,,297,,,,,240,,,240,,240', ',,,,,,,,338,,340,340,344,347,340,,,,,,,,,,,,,,,,,,240,,,,,,,,,,,,,,', ',29,29,29,29,29,240,,29,29,29,,,,,,,,29,,779,,,,,,,,,,,543,850,,,,,240', ',240,,,,,,,,,,,,,,,,,,,240,,,,,,,,,,29,,,,,,29,,,29,,29,297,,,240,29', ',,,569,,,572,,240,575,,240,,,,,,,582,,,29,240,,,,,,,,,,,,29,29,,,,,', ',,431,431,,240,,,240,,,,,615,,,572,,,,,,,449,,,240,,,,,,,,,,,240,,,', ',,,,,,,,,,29,,,,,,,,,,,,489,,,,,,,,,,,681,,,,,,,,29,,,,,,,,,,,,,,,,705', ',,,708,,,,,,,,,,,,,,713,,,,,,,,,,,569,,,29,,,,,,,,,,,,548,729,,,,29', ',615,,,,,,,,297,,,29,,,,371,,,,,,,,,,,,29,,,,29,,,,,29,,29,562,,,,,', '431,,,548,,29,548,,,,,29,,562,562,,,,431,,777,,,,,,,,297,,,,,,,,29,29', ',,,,29,,,572,,,,,572,,,,,,,,,,,,,,,,,,297,,,,,,,,,,,,,,,820,,,29,,,', ',,,,,,,,,,,,,,836,,,,,,,,,,,,,,,,,,,,,,,,,29,,,,431,29,854,,857,,,,29', '29,,,,562,,,431,,,,,,,615,,,,,,,,,29,,,548,,,,,,29,,727,732,,,,,,,,', ',727,,727,,569,,,572,29,,,,,,,,,,898,,29,29,297,,,,,,,,,,29,,,,,,,,', '29,910,29,29,913,,,,,,,,,,,29,29,,,,,,572,,,,,,,,,,,926,,,,,,,,,,431', ',,431,,,,,431,,,,,,29,548,548,,,,,807,,,,811,29,,,,,,,,,,,,,29,,,,,', ',,,,,,,,,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,29,,29,,,,,29,431,,29,431,,,', ',29,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,297,,,,,,,431,,,,431,,,431', ',,,,,,,,,,727,,,,,,,,,,,,,,,,,,,,,,,,431,,,,,727,,,,,,,,,,,,,431,,,431', ',,,,,,,,,,,,431' ] racc_goto_table = arr = ::Array.new(2727, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '45,43,49,49,5,48,45,21,25,82,52,52,3,13,13,56,56,32,85,48,79,79,143', '29,29,29,86,59,59,59,9,45,45,45,80,57,57,57,149,41,60,53,53,25,44,56', '35,25,25,17,61,25,145,61,29,131,11,23,23,134,49,131,45,81,81,45,6,40', '63,63,63,36,135,55,49,136,85,33,33,6,15,15,46,141,15,141,137,138,9,149', '36,36,25,25,25,25,140,47,45,47,31,31,31,128,128,144,45,128,148,130,4', '34,34,34,7,12,14,18,26,142,142,142,27,37,38,15,15,15,15,54,64,58,58', '65,67,68,33,33,75,76,77,83,84,87,88,21,89,90,11,91,92,93,94,95,96,97', '11,98,143,99,100,101,102,103,145,104,105,106,107,108,109,111,112,115', '116,117,118,119,120,121,122,123,126,127,129,20,25,25,45,49,1,20,29,132', '133,,82,141,,,,57,57,20,20,45,,,20,20,20,,,,,46,20,20,20,17,17,17,,36', ',17,,,,,,,,,,,,,20,20,,,20,20,,,20,20,,131,,,,56,16,29,,,,59,16,29,', ',29,59,45,57,59,60,45,45,,57,41,,57,33,33,41,,44,,20,,16,,20,20,20,20', '20,60,45,142,142,25,25,142,,63,56,40,56,,59,63,40,55,63,80,,149,57,81', ',16,149,45,58,45,,58,85,6,,,55,,15,15,,31,61,61,9,,35,31,,,31,35,143', ',,33,86,21,32,,,16,,49,33,,,,,16,,52,,45,13,,3,3,142,,,,20,20,20,20', '20,,,20,20,20,,,,33,,,49,20,,,53,,29,60,,,62,,,,,,,,,,,,,,21,,,,,,,', ',,,5,,,,,,,,59,25,,,,,,22,20,,16,,,22,20,59,,20,,20,,21,,20,20,49,79', '16,29,149,,25,34,,49,,34,3,22,22,22,,,33,33,23,20,55,55,,,,,,,,63,45', ',20,20,45,,,,49,45,,29,22,25,20,,20,,55,25,85,85,,,,55,,,149,,34,16', ',34,79,33,16,85,,79,,43,49,,,,,,22,,52,,,13,,56,22,,16,,20,,,,,,,,,', ',,45,,,,,82,,,,53,,,17,17,,,,,17,20,,,,,,,,,3,62,,,29,21,3,,59,,,,,', ',,,,,,48,,,,,,60,,,16,,,57,,,,,25,22,20,,,,,,,49,,,,,,29,57,,22,20,', ',45,45,,,,,,,,,20,15,,85,,,49,,85,,,,,,45,,20,,,,20,,,56,56,20,,20,', ',,,,,,,,,,20,45,45,,55,45,20,,22,,,,22,22,17,59,,45,45,,,,,57,,,62,', '25,45,33,20,20,,,22,,20,,,45,45,62,,25,,16,,,20,16,43,,45,55,16,63,', ',,22,15,22,85,,56,55,,,,,85,,,,,,15,,,,20,45,,,,,,,,55,,,,56,45,2,21', ',,,,,,,,22,45,,,,45,,,,,,,,,45,,,,20,56,56,2,,20,,,56,,,,20,20,,,85', '49,45,45,29,,,,,45,,,,,,,,,59,,20,,,45,62,45,,62,,20,45,56,62,45,,,', ',,45,,,,,,,20,20,45,,20,56,,,,,,,,,,,20,20,56,16,16,,45,,,,,,20,,,,', ',,45,,20,,20,20,,,16,,22,,,,22,,,20,20,22,,,,,,19,,,,,,19,,62,16,16', '62,,16,,,,,,,,20,,,,16,16,,,,,19,,,20,,,16,2,,,,,,,,20,,16,16,20,,,', ',2,,22,,20,,16,,62,,,,62,,,62,,,,,,,,,,,20,20,20,,,,,20,,,,,,,,,,19', ',,,20,16,20,62,19,,,20,,,20,,,16,2,,20,16,,2,,62,,,62,20,16,,,,,,,,', ',,62,,,,,22,22,,20,,,16,16,,,,,,16,,,20,,,,,,,22,22,,,16,,16,,,,,16', ',,16,,,,,,16,19,,,,,,22,22,16,,22,,,,,,,19,,,,,22,22,,,2,,16,,,,,,22', ',,,,,,16,,,28,22,22,,28,28,28,,,,,,,,22,,,,,,28,28,28,,,,,,,,,,,,19', '28,,,,19,,,,22,,,,,,,,,,,,,22,,,,,19,,,,,,,22,,,,22,,,,,,,,,22,,,,,', ',,,,,,,,,,,,,,,,22,22,,,2,,,22,2,,,,,2,,,,,,,,22,,22,,,,,22,19,,22,', ',,,,22,,,,,,,,,22,,,,,,,,,,,,,,,,,,,,22,28,28,28,28,,,28,,,,,,22,,,', ',,,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28', '28,28,28,28,28,,,,,,,,28,,28,,,,,,,,,,,28,,,,,,28,,,28,,,,,,,,,,,,19', ',,,19,,,,,19,,,,,,28,,,,,,,,28,,28,,,,,,,,2,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,2,,,,,,,,,,,,2,2,,,,,,,,,,,2,,,,,,,,28,,,2,2,,,,,,,,,,,,,,,,,,', ',28,,28,28,28,,,,,,,,,,,,,,,,,,,,,,,,,,,,,28,2,,28,,,28,19,19,,,,,2', ',28,,,,,,,,,,,2,,,,,19,28,,,,,,,28,28,28,,,,,,,,,,28,,,28,,,,,,,19,', ',,,,,,2,,2,28,19,19,,2,,,,,,,,,19,,,,,,,,,,,19,19,,,,,,,,,,,,19,,28', '28,,,28,28,,,,,28,,,28,,,,,,,28,,,,,28,,,,28,,,39,,,,,,39,,19,,,28,', ',,,,,39,39,19,,28,39,39,39,,,,,,39,,19,,,24,24,28,,,28,,,28,,,,,,,,', '39,39,,,39,39,28,,39,,,,,,,,,28,,,,,,19,,19,,,,,19,,,19,,,24,,24,19', ',,,,,39,,,,39,39,39,39,39,,,28,28,,,,,,,,,,28,28,28,,,,,,,10,,,,,28', ',,28,,28,,,,,,,,,10,,10,10,10,10,10,,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,', ',,,39,39,39,39,39,28,,39,39,39,,,,,,,,39,,28,,,,,,,,,,,24,28,,,,,28', ',28,,,,,,,,,,,,,,,,,,,28,,,,,,,,,,39,,,,,,39,,,39,,39,10,,,28,39,,,', '24,,,24,,28,24,,28,,,,,,,24,,,39,28,,,,,,,,,,,,39,39,,,,,,,,10,10,,28', ',,28,,,,,24,,,24,,,,,,,10,,,28,,,,,,,,,,,28,,,,,,,,,,,,,,39,,,,,,,,', ',,,10,,,,,,,,,,,24,,,,,,,,39,,,,,,,,,,,,,,,,24,,,,24,,,,,,,,,,,,,,24', ',,,,,,,,,,24,,,39,,,,,,,,,,,,10,24,,,,39,,24,,,,,,,,10,,,39,,,,24,,', ',,,,,,,,,39,,,,39,,,,,39,,39,10,,,,,,10,,,10,,39,10,,,,,39,,10,10,,', ',10,,24,,,,,,,,10,,,,,,,,39,39,,,,,39,,,24,,,,,24,,,,,,,,,,,,,,,,,,10', ',,,,,,,,,,,,,,24,,,39,,,,,,,,,,,,,,,,,,24,,,,,,,,,,,,,,,,,,,,,,,,,39', ',,,10,39,24,,24,,,,39,39,,,,10,,,10,,,,,,,24,,,,,,,,,39,,,10,,,,,,39', ',10,10,,,,,,,,,,10,,10,,24,,,24,39,,,,,,,,,,24,,39,39,10,,,,,,,,,,39', ',,,,,,,,39,24,39,39,24,,,,,,,,,,,39,39,,,,,,24,,,,,,,,,,,24,,,,,,,,', ',10,,,10,,,,,10,,,,,,39,10,10,,,,,10,,,,10,39,,,,,,,,,,,,,39,,,,,,,', ',,,,,,,,,,,,,,,,39,,,,,,,,,,,,,,,,,,,39,,39,,,,,39,10,,39,10,,,,,39', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10,,,,,,,10,,,,10,,,10,,,,,,', ',,,,10,,,,,,,,,,,,,,,,,,,,,,,,10,,,,,10,,,,,,,,,,,,,10,,,10,,,,,,,,', ',,,,10' ] racc_goto_check = arr = ::Array.new(2727, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_goto_pointer = [ nil, 190, 791, -283, 110, -472, -544, -612, nil, 25, 1800, 48, 110, 4, 106, 21, 252, 28, 53, 941, 183, -49, 437, -134, 1572, -12, 8, 111, 1154, -2, nil, 75, -246, -118, 82, -210, -357, -318, -585, 1725, 34, 6, nil, -33, 9, -2, -427, -223, -62, -7, nil, nil, 1, 32, -236, 29, -19, 10, -168, 2, 10, -387, 156, 43, -315, -124, nil, -311, -452, nil, nil, nil, nil, nil, nil, 71, -164, 82, nil, -286, -587, -433, -302, 77, -371, 13, -490, 76, -188, 92, -149, 92, 89, -473, 90, -475, -352, -666, 92, -486, -161, -488, -663, 97, -350, -165, -350, -601, -394, -393, nil, -66, -393, nil, nil, -87, -414, -86, -413, -455, -690, -322, -431, -549, nil, nil, 109, 108, 26, 105, -234, -282, 113, -479, -465, -453, -6, -561, -565, nil, -664, -677, -535, -494, -655, -710, nil, nil, -227, -395 ] racc_goto_default = [ nil, nil, 476, nil, nil, nil, 736, nil, 5, nil, 6, 7, 312, nil, nil, nil, 205, 19, 14, 206, 289, nil, 204, nil, 247, 18, nil, nil, 22, 23, 24, nil, 28, 602, nil, nil, nil, nil, nil, 280, 32, nil, 34, 37, 36, 202, 510, nil, 117, 384, 116, 119, 71, 72, nil, nil, 45, 299, nil, 300, 549, 550, 429, 568, nil, nil, 257, nil, nil, 46, 47, 48, 49, 50, 51, 52, nil, 258, 58, nil, nil, nil, nil, nil, nil, 492, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 238, nil, nil, 388, 259, nil, nil, nil, nil, nil, nil, nil, nil, nil, 70, 73, 74, nil, nil, nil, nil, 527, nil, nil, nil, nil, nil, nil, 653, 654, 655, 656, nil, 832, 663, 664, 667, 670, nil, 251 ] racc_reduce_table = [ 0, 0, :racc_error, 0, 136, :_reduce_1, 2, 133, :_reduce_2, 4, 135, :_reduce_3, 2, 134, :_reduce_4, 1, 140, :_reduce_none, 1, 140, :_reduce_none, 3, 140, :_reduce_7, 2, 140, :_reduce_8, 0, 158, :_reduce_9, 4, 143, :_reduce_10, 3, 143, :_reduce_11, 3, 143, :_reduce_12, 3, 143, :_reduce_13, 2, 143, :_reduce_14, 3, 143, :_reduce_15, 3, 143, :_reduce_16, 3, 143, :_reduce_17, 3, 143, :_reduce_18, 3, 143, :_reduce_19, 0, 159, :_reduce_20, 5, 143, :_reduce_21, 4, 143, :_reduce_22, 3, 143, :_reduce_23, 3, 143, :_reduce_24, 3, 143, :_reduce_25, 6, 143, :_reduce_26, 5, 143, :_reduce_27, 5, 143, :_reduce_28, 5, 143, :_reduce_29, 3, 143, :_reduce_30, 3, 143, :_reduce_31, 3, 143, :_reduce_32, 3, 143, :_reduce_33, 1, 143, :_reduce_none, 1, 157, :_reduce_none, 3, 157, :_reduce_36, 3, 157, :_reduce_37, 2, 157, :_reduce_38, 2, 157, :_reduce_39, 1, 157, :_reduce_none, 1, 147, :_reduce_41, 1, 149, :_reduce_none, 1, 149, :_reduce_none, 2, 149, :_reduce_44, 2, 149, :_reduce_45, 2, 149, :_reduce_46, 1, 162, :_reduce_none, 4, 162, :_reduce_48, 4, 162, :_reduce_49, 0, 169, :_reduce_50, 0, 170, :_reduce_51, 6, 167, :_reduce_52, 2, 161, :_reduce_53, 3, 161, :_reduce_54, 4, 161, :_reduce_55, 5, 161, :_reduce_56, 4, 161, :_reduce_57, 5, 161, :_reduce_58, 2, 161, :_reduce_59, 2, 161, :_reduce_60, 1, 150, :_reduce_none, 3, 150, :_reduce_62, 1, 173, :_reduce_none, 3, 173, :_reduce_64, 1, 172, :_reduce_65, 2, 172, :_reduce_66, 3, 172, :_reduce_67, 2, 172, :_reduce_68, 2, 172, :_reduce_69, 1, 172, :_reduce_70, 1, 175, :_reduce_none, 3, 175, :_reduce_72, 2, 174, :_reduce_73, 3, 174, :_reduce_74, 1, 176, :_reduce_75, 4, 176, :_reduce_76, 3, 176, :_reduce_77, 3, 176, :_reduce_78, 3, 176, :_reduce_79, 3, 176, :_reduce_80, 2, 176, :_reduce_81, 1, 176, :_reduce_82, 1, 148, :_reduce_83, 4, 148, :_reduce_84, 3, 148, :_reduce_85, 3, 148, :_reduce_86, 3, 148, :_reduce_87, 3, 148, :_reduce_88, 2, 148, :_reduce_89, 1, 148, :_reduce_90, 1, 178, :_reduce_91, 1, 178, :_reduce_none, 2, 179, :_reduce_93, 1, 179, :_reduce_94, 3, 179, :_reduce_95, 1, 180, :_reduce_none, 1, 180, :_reduce_none, 1, 180, :_reduce_none, 1, 180, :_reduce_99, 1, 180, :_reduce_100, 1, 183, :_reduce_none, 1, 183, :_reduce_none, 1, 145, :_reduce_103, 1, 145, :_reduce_none, 1, 146, :_reduce_105, 0, 186, :_reduce_106, 4, 146, :_reduce_107, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 181, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 1, 182, :_reduce_none, 3, 160, :_reduce_174, 5, 160, :_reduce_175, 3, 160, :_reduce_176, 6, 160, :_reduce_177, 5, 160, :_reduce_178, 5, 160, :_reduce_179, 5, 160, :_reduce_180, 5, 160, :_reduce_181, 4, 160, :_reduce_182, 3, 160, :_reduce_183, 3, 160, :_reduce_184, 3, 160, :_reduce_185, 3, 160, :_reduce_186, 3, 160, :_reduce_187, 3, 160, :_reduce_188, 3, 160, :_reduce_189, 3, 160, :_reduce_190, 3, 160, :_reduce_191, 4, 160, :_reduce_192, 4, 160, :_reduce_193, 2, 160, :_reduce_194, 2, 160, :_reduce_195, 3, 160, :_reduce_196, 3, 160, :_reduce_197, 3, 160, :_reduce_198, 3, 160, :_reduce_199, 3, 160, :_reduce_200, 3, 160, :_reduce_201, 3, 160, :_reduce_202, 3, 160, :_reduce_203, 3, 160, :_reduce_204, 3, 160, :_reduce_205, 3, 160, :_reduce_206, 3, 160, :_reduce_207, 3, 160, :_reduce_208, 2, 160, :_reduce_209, 2, 160, :_reduce_210, 3, 160, :_reduce_211, 3, 160, :_reduce_212, 3, 160, :_reduce_213, 3, 160, :_reduce_214, 3, 160, :_reduce_215, 5, 160, :_reduce_216, 1, 160, :_reduce_none, 1, 156, :_reduce_218, 1, 153, :_reduce_none, 2, 153, :_reduce_220, 2, 153, :_reduce_221, 5, 153, :_reduce_222, 2, 153, :_reduce_223, 3, 153, :_reduce_224, 3, 192, :_reduce_225, 4, 192, :_reduce_226, 4, 192, :_reduce_227, 6, 192, :_reduce_228, 1, 193, :_reduce_none, 1, 193, :_reduce_none, 1, 163, :_reduce_231, 2, 163, :_reduce_232, 5, 163, :_reduce_233, 2, 163, :_reduce_234, 5, 163, :_reduce_235, 4, 163, :_reduce_236, 7, 163, :_reduce_237, 3, 163, :_reduce_238, 1, 163, :_reduce_none, 4, 196, :_reduce_240, 3, 196, :_reduce_241, 5, 196, :_reduce_242, 7, 196, :_reduce_243, 2, 196, :_reduce_244, 5, 196, :_reduce_245, 4, 196, :_reduce_246, 6, 196, :_reduce_247, 7, 196, :_reduce_248, 9, 196, :_reduce_249, 3, 196, :_reduce_250, 1, 196, :_reduce_none, 0, 198, :_reduce_252, 2, 166, :_reduce_253, 1, 197, :_reduce_none, 0, 199, :_reduce_255, 3, 197, :_reduce_256, 0, 200, :_reduce_257, 4, 197, :_reduce_258, 2, 195, :_reduce_259, 2, 194, :_reduce_260, 1, 194, :_reduce_none, 1, 189, :_reduce_262, 3, 189, :_reduce_263, 3, 155, :_reduce_264, 4, 155, :_reduce_265, 2, 155, :_reduce_266, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_none, 1, 188, :_reduce_275, 0, 221, :_reduce_276, 4, 188, :_reduce_277, 0, 222, :_reduce_278, 5, 188, :_reduce_279, 3, 188, :_reduce_280, 3, 188, :_reduce_281, 2, 188, :_reduce_282, 4, 188, :_reduce_283, 3, 188, :_reduce_284, 0, 223, :_reduce_285, 4, 188, :_reduce_286, 1, 188, :_reduce_287, 4, 188, :_reduce_288, 3, 188, :_reduce_289, 1, 188, :_reduce_290, 5, 188, :_reduce_291, 2, 188, :_reduce_292, 1, 188, :_reduce_none, 2, 188, :_reduce_294, 6, 188, :_reduce_295, 6, 188, :_reduce_296, 0, 224, :_reduce_297, 0, 225, :_reduce_298, 7, 188, :_reduce_299, 0, 226, :_reduce_300, 0, 227, :_reduce_301, 7, 188, :_reduce_302, 5, 188, :_reduce_303, 4, 188, :_reduce_304, 5, 188, :_reduce_305, 0, 228, :_reduce_306, 0, 229, :_reduce_307, 9, 188, :_reduce_308, 0, 230, :_reduce_309, 0, 231, :_reduce_310, 7, 188, :_reduce_311, 0, 232, :_reduce_312, 0, 233, :_reduce_313, 0, 234, :_reduce_314, 9, 188, :_reduce_315, 0, 235, :_reduce_316, 0, 236, :_reduce_317, 6, 188, :_reduce_318, 0, 237, :_reduce_319, 6, 188, :_reduce_320, 0, 238, :_reduce_321, 0, 239, :_reduce_322, 9, 188, :_reduce_323, 1, 188, :_reduce_324, 1, 188, :_reduce_325, 1, 188, :_reduce_326, 1, 188, :_reduce_327, 1, 152, :_reduce_328, 1, 211, :_reduce_none, 1, 211, :_reduce_none, 1, 211, :_reduce_none, 2, 211, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 212, :_reduce_none, 5, 212, :_reduce_337, 1, 138, :_reduce_none, 2, 138, :_reduce_339, 1, 215, :_reduce_none, 1, 215, :_reduce_341, 1, 240, :_reduce_342, 3, 240, :_reduce_343, 1, 241, :_reduce_344, 2, 241, :_reduce_345, 4, 241, :_reduce_346, 7, 241, :_reduce_347, 6, 241, :_reduce_348, 4, 241, :_reduce_349, 3, 241, :_reduce_350, 5, 241, :_reduce_351, 4, 241, :_reduce_352, 2, 241, :_reduce_353, 1, 241, :_reduce_354, 2, 241, :_reduce_355, 1, 168, :_reduce_356, 2, 168, :_reduce_357, 1, 168, :_reduce_358, 3, 168, :_reduce_359, 0, 243, :_reduce_360, 0, 244, :_reduce_361, 6, 242, :_reduce_362, 2, 164, :_reduce_363, 4, 164, :_reduce_364, 4, 164, :_reduce_365, 0, 246, :_reduce_366, 3, 210, :_reduce_367, 4, 210, :_reduce_368, 4, 210, :_reduce_369, 3, 210, :_reduce_370, 2, 210, :_reduce_371, 1, 210, :_reduce_372, 0, 247, :_reduce_373, 0, 248, :_reduce_374, 6, 209, :_reduce_375, 0, 249, :_reduce_376, 0, 250, :_reduce_377, 6, 209, :_reduce_378, 0, 253, :_reduce_379, 6, 214, :_reduce_380, 1, 251, :_reduce_none, 4, 251, :_reduce_382, 2, 251, :_reduce_383, 1, 252, :_reduce_none, 1, 252, :_reduce_none, 6, 137, :_reduce_386, 0, 137, :_reduce_387, 1, 254, :_reduce_388, 1, 254, :_reduce_none, 1, 254, :_reduce_none, 2, 255, :_reduce_391, 1, 255, :_reduce_none, 2, 139, :_reduce_393, 1, 139, :_reduce_none, 1, 201, :_reduce_395, 1, 201, :_reduce_396, 1, 201, :_reduce_none, 1, 202, :_reduce_398, 1, 257, :_reduce_none, 2, 257, :_reduce_400, 3, 258, :_reduce_401, 1, 258, :_reduce_402, 3, 203, :_reduce_403, 3, 204, :_reduce_404, 3, 205, :_reduce_405, 3, 205, :_reduce_406, 1, 261, :_reduce_407, 3, 261, :_reduce_408, 1, 262, :_reduce_none, 2, 262, :_reduce_410, 3, 206, :_reduce_411, 3, 206, :_reduce_412, 1, 264, :_reduce_413, 3, 264, :_reduce_414, 1, 259, :_reduce_415, 2, 259, :_reduce_416, 1, 260, :_reduce_417, 2, 260, :_reduce_418, 1, 263, :_reduce_419, 0, 266, :_reduce_420, 3, 263, :_reduce_421, 0, 267, :_reduce_422, 4, 263, :_reduce_423, 1, 265, :_reduce_424, 1, 265, :_reduce_425, 1, 265, :_reduce_426, 1, 265, :_reduce_none, 2, 184, :_reduce_428, 1, 184, :_reduce_429, 1, 268, :_reduce_none, 1, 268, :_reduce_none, 1, 268, :_reduce_none, 1, 268, :_reduce_none, 3, 185, :_reduce_434, 1, 256, :_reduce_none, 1, 256, :_reduce_none, 2, 256, :_reduce_437, 2, 256, :_reduce_438, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_none, 1, 177, :_reduce_444, 1, 177, :_reduce_445, 1, 177, :_reduce_446, 1, 177, :_reduce_447, 1, 177, :_reduce_448, 1, 177, :_reduce_449, 1, 207, :_reduce_450, 1, 151, :_reduce_451, 1, 154, :_reduce_452, 1, 154, :_reduce_453, 1, 216, :_reduce_454, 0, 269, :_reduce_455, 4, 216, :_reduce_456, 2, 216, :_reduce_457, 4, 218, :_reduce_458, 2, 218, :_reduce_459, 6, 270, :_reduce_460, 4, 270, :_reduce_461, 4, 270, :_reduce_462, 2, 270, :_reduce_463, 4, 270, :_reduce_464, 2, 270, :_reduce_465, 2, 270, :_reduce_466, 1, 270, :_reduce_467, 0, 270, :_reduce_468, 1, 276, :_reduce_469, 1, 276, :_reduce_470, 1, 276, :_reduce_471, 1, 276, :_reduce_472, 1, 276, :_reduce_473, 1, 271, :_reduce_474, 3, 271, :_reduce_475, 3, 277, :_reduce_476, 1, 272, :_reduce_477, 3, 272, :_reduce_478, 1, 278, :_reduce_none, 1, 278, :_reduce_none, 2, 273, :_reduce_481, 1, 273, :_reduce_482, 1, 279, :_reduce_none, 1, 279, :_reduce_none, 2, 275, :_reduce_485, 2, 274, :_reduce_486, 0, 274, :_reduce_487, 1, 219, :_reduce_none, 0, 280, :_reduce_489, 5, 219, :_reduce_490, 1, 208, :_reduce_491, 2, 208, :_reduce_492, 2, 208, :_reduce_493, 1, 191, :_reduce_none, 3, 191, :_reduce_495, 3, 281, :_reduce_496, 1, 171, :_reduce_none, 1, 171, :_reduce_none, 1, 171, :_reduce_none, 1, 165, :_reduce_none, 1, 165, :_reduce_none, 1, 165, :_reduce_none, 1, 165, :_reduce_none, 1, 245, :_reduce_none, 1, 245, :_reduce_none, 1, 245, :_reduce_none, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 0, 141, :_reduce_none, 1, 141, :_reduce_none, 0, 187, :_reduce_none, 1, 187, :_reduce_none, 0, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 190, :_reduce_none, 1, 217, :_reduce_516, 1, 217, :_reduce_none, 1, 144, :_reduce_none, 2, 144, :_reduce_519, 0, 142, :_reduce_520 ] racc_reduce_n = 521 racc_shift_n = 928 racc_token_table = { false => 0, :error => 1, :kCLASS => 2, :kMODULE => 3, :kDEF => 4, :kUNDEF => 5, :kBEGIN => 6, :kRESCUE => 7, :kENSURE => 8, :kEND => 9, :kIF => 10, :kUNLESS => 11, :kTHEN => 12, :kELSIF => 13, :kELSE => 14, :kCASE => 15, :kWHEN => 16, :kWHILE => 17, :kUNTIL => 18, :kFOR => 19, :kBREAK => 20, :kNEXT => 21, :kREDO => 22, :kRETRY => 23, :kIN => 24, :kDO => 25, :kDO_COND => 26, :kDO_BLOCK => 27, :kRETURN => 28, :kYIELD => 29, :kSUPER => 30, :kSELF => 31, :kNIL => 32, :kTRUE => 33, :kFALSE => 34, :kAND => 35, :kOR => 36, :kNOT => 37, :kIF_MOD => 38, :kUNLESS_MOD => 39, :kWHILE_MOD => 40, :kUNTIL_MOD => 41, :kRESCUE_MOD => 42, :kALIAS => 43, :kDEFINED => 44, :klBEGIN => 45, :klEND => 46, :k__LINE__ => 47, :k__FILE__ => 48, :tIDENTIFIER => 49, :tFID => 50, :tGVAR => 51, :tIVAR => 52, :tCONSTANT => 53, :tCVAR => 54, :tNTH_REF => 55, :tBACK_REF => 56, :tSTRING_CONTENT => 57, :tINTEGER => 58, :tFLOAT => 59, :tREGEXP_END => 60, :tUPLUS => 61, :tUMINUS => 62, :tUMINUS_NUM => 63, :tPOW => 64, :tCMP => 65, :tEQ => 66, :tEQQ => 67, :tNEQ => 68, :tGEQ => 69, :tLEQ => 70, :tANDOP => 71, :tOROP => 72, :tMATCH => 73, :tNMATCH => 74, :tDOT => 75, :tDOT2 => 76, :tDOT3 => 77, :tAREF => 78, :tASET => 79, :tLSHFT => 80, :tRSHFT => 81, :tCOLON2 => 82, :tCOLON3 => 83, :tOP_ASGN => 84, :tASSOC => 85, :tLPAREN => 86, :tLPAREN2 => 87, :tRPAREN => 88, :tLPAREN_ARG => 89, :tLBRACK => 90, :tLBRACK2 => 91, :tRBRACK => 92, :tLBRACE => 93, :tLBRACE_ARG => 94, :tSTAR => 95, :tSTAR2 => 96, :tAMPER => 97, :tAMPER2 => 98, :tTILDE => 99, :tPERCENT => 100, :tDIVIDE => 101, :tPLUS => 102, :tMINUS => 103, :tLT => 104, :tGT => 105, :tPIPE => 106, :tBANG => 107, :tCARET => 108, :tLCURLY => 109, :tRCURLY => 110, :tBACK_REF2 => 111, :tSYMBEG => 112, :tSTRING_BEG => 113, :tXSTRING_BEG => 114, :tREGEXP_BEG => 115, :tWORDS_BEG => 116, :tQWORDS_BEG => 117, :tSTRING_DBEG => 118, :tSTRING_DVAR => 119, :tSTRING_END => 120, :tSTRING => 121, :tSYMBOL => 122, :tNL => 123, :tEH => 124, :tCOLON => 125, :tCOMMA => 126, :tSPACE => 127, :tSEMI => 128, :tLAST_TOKEN => 129, :tEQL => 130, :tLOWEST => 131 } racc_nt_base = 132 racc_use_result_var = true Racc_arg = [ racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var ] Racc_token_to_s_table = [ "$end", "error", "kCLASS", "kMODULE", "kDEF", "kUNDEF", "kBEGIN", "kRESCUE", "kENSURE", "kEND", "kIF", "kUNLESS", "kTHEN", "kELSIF", "kELSE", "kCASE", "kWHEN", "kWHILE", "kUNTIL", "kFOR", "kBREAK", "kNEXT", "kREDO", "kRETRY", "kIN", "kDO", "kDO_COND", "kDO_BLOCK", "kRETURN", "kYIELD", "kSUPER", "kSELF", "kNIL", "kTRUE", "kFALSE", "kAND", "kOR", "kNOT", "kIF_MOD", "kUNLESS_MOD", "kWHILE_MOD", "kUNTIL_MOD", "kRESCUE_MOD", "kALIAS", "kDEFINED", "klBEGIN", "klEND", "k__LINE__", "k__FILE__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tNTH_REF", "tBACK_REF", "tSTRING_CONTENT", "tINTEGER", "tFLOAT", "tREGEXP_END", "tUPLUS", "tUMINUS", "tUMINUS_NUM", "tPOW", "tCMP", "tEQ", "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", "tDOT", "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN2", "tRPAREN", "tLPAREN_ARG", "tLBRACK", "tLBRACK2", "tRBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tSTAR2", "tAMPER", "tAMPER2", "tTILDE", "tPERCENT", "tDIVIDE", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAST_TOKEN", "tEQL", "tLOWEST", "$start", "program", "compstmt", "bodystmt", "@1", "opt_rescue", "opt_else", "opt_ensure", "stmts", "opt_terms", "none", "stmt", "terms", "fitem", "undef_list", "expr_value", "lhs", "command_call", "mlhs", "var_lhs", "primary_value", "aref_args", "backref", "mrhs", "arg_value", "expr", "@2", "@3", "arg", "command", "block_command", "call_args", "block_call", "operation2", "command_args", "cmd_brace_block", "opt_block_var", "@4", "@5", "operation", "mlhs_basic", "mlhs_entry", "mlhs_head", "mlhs_item", "mlhs_node", "variable", "cname", "cpath", "fname", "op", "reswords", "fsym", "symbol", "dsym", "@6", "opt_nl", "primary", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "call_args2", "open_args", "@7", "@8", "@9", "literal", "strings", "xstring", "regexp", "words", "qwords", "var_ref", "assoc_list", "brace_block", "method_call", "then", "if_tail", "do", "case_body", "for_var", "superclass", "term", "f_arglist", "singleton", "dot_or_colon", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23", "@24", "@25", "@26", "@27", "@28", "block_par", "block_var", "do_block", "@29", "@30", "operation3", "@31", "@32", "@33", "@34", "@35", "when_args", "cases", "@36", "exc_list", "exc_var", "numeric", "string", "string1", "string_contents", "xstring_contents", "word_list", "word", "string_content", "qword_list", "string_dvar", "@37", "@38", "sym", "@39", "f_args", "f_arg", "f_optarg", "f_rest_arg", "opt_f_block_arg", "f_block_arg", "f_norm_arg", "f_opt", "restarg_mark", "blkarg_mark", "@40", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted def _reduce_1(val, _values, result) self.lexer.lex_state = :expr_beg result end def _reduce_2(val, _values, result) result = val[1] result end def _reduce_3(val, _values, result) result = new_body val result end def _reduce_4(val, _values, result) result = new_compstmt val result end # reduce 5 omitted # reduce 6 omitted def _reduce_7(val, _values, result) result = block_append val[0], val[2] result end def _reduce_8(val, _values, result) result = val[1] result end def _reduce_9(val, _values, result) lexer.lex_state = :expr_fname result = self.lexer.lineno result end def _reduce_10(val, _values, result) result = s(:alias, val[1], val[3]).line(val[2]) result end def _reduce_11(val, _values, result) result = s(:valias, val[1].to_sym, val[2].to_sym) result end def _reduce_12(val, _values, result) result = s(:valias, val[1].to_sym, :"$#{val[2]}") result end def _reduce_13(val, _values, result) yyerror "can't make alias for the number variables" result end def _reduce_14(val, _values, result) result = val[1] result end def _reduce_15(val, _values, result) result = new_if val[2], val[0], nil result end def _reduce_16(val, _values, result) result = new_if val[2], nil, val[0] result end def _reduce_17(val, _values, result) result = new_while val[0], val[2], true result end def _reduce_18(val, _values, result) result = new_until val[0], val[2], true result end def _reduce_19(val, _values, result) result = s(:rescue, val[0], new_resbody(s(:array), val[2])) result end def _reduce_20(val, _values, result) if (in_def || in_single > 0) then yyerror "BEGIN in method" end self.env.extend result end def _reduce_21(val, _values, result) result = new_iter s(:preexe), nil, val[3] result end def _reduce_22(val, _values, result) if (in_def || in_single > 0) then yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] result end def _reduce_23(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_24(val, _values, result) result = new_masgn val[0], val[2], :wrap result end def _reduce_25(val, _values, result) result = new_op_asgn val result end def _reduce_26(val, _values, result) result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_27(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) result end def _reduce_28(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) result end def _reduce_29(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) result end def _reduce_30(val, _values, result) backref_assign_error val[0] result end def _reduce_31(val, _values, result) result = new_assign val[0], s(:svalue, val[2]) result end def _reduce_32(val, _values, result) result = new_masgn val[0], val[2], :wrap result end def _reduce_33(val, _values, result) result = new_masgn val[0], val[2] result end # reduce 34 omitted # reduce 35 omitted def _reduce_36(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_37(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_38(val, _values, result) result = s(:not, val[1]) result end def _reduce_39(val, _values, result) result = s(:not, val[1]) result end # reduce 40 omitted def _reduce_41(val, _values, result) result = value_expr(val[0]) result end # reduce 42 omitted # reduce 43 omitted def _reduce_44(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) result end def _reduce_45(val, _values, result) line = val[0].last result = s(:break, ret_args(val[1])).line(line) result end def _reduce_46(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) result end # reduce 47 omitted def _reduce_48(val, _values, result) result = new_call val[0], val[2], val[3] result end def _reduce_49(val, _values, result) result = new_call val[0], val[2], val[3] result end def _reduce_50(val, _values, result) self.env.extend(:dynamic) result = self.lexer.lineno result end def _reduce_51(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_52(val, _values, result) result = new_iter nil, val[2], val[4] self.env.unextend result end def _reduce_53(val, _values, result) result = new_call nil, val[0].to_sym, val[1] result end def _reduce_54(val, _values, result) result = new_call nil, val[0].to_sym, val[1] if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end result end def _reduce_55(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_56(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] raise "no2" if val[4] then block_dup_check result, val[4] val[2] << result result = val[2] end result end def _reduce_57(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_58(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] raise "no3" if val[4] then block_dup_check result, val[4] val[2] << result result = val[2] end result end def _reduce_59(val, _values, result) result = new_super val[1] result end def _reduce_60(val, _values, result) result = new_yield val[1] result end # reduce 61 omitted def _reduce_62(val, _values, result) result = val[1] result end # reduce 63 omitted def _reduce_64(val, _values, result) result = s(:masgn, s(:array, val[1])) result end def _reduce_65(val, _values, result) result = s(:masgn, val[0]) result end def _reduce_66(val, _values, result) result = s(:masgn, val[0] << val[1].compact) result end def _reduce_67(val, _values, result) result = s(:masgn, val[0] << s(:splat, val[2])) result end def _reduce_68(val, _values, result) result = s(:masgn, val[0] << s(:splat)) result end def _reduce_69(val, _values, result) result = s(:masgn, s(:array, s(:splat, val[1]))) result end def _reduce_70(val, _values, result) result = s(:masgn, s(:array, s(:splat))) result end # reduce 71 omitted def _reduce_72(val, _values, result) result = val[1] result end def _reduce_73(val, _values, result) result = s(:array, val[0]) result end def _reduce_74(val, _values, result) result = val[0] << val[1].compact result end def _reduce_75(val, _values, result) result = assignable val[0] result end def _reduce_76(val, _values, result) result = aryset val[0], val[2] result end def _reduce_77(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_78(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_79(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_80(val, _values, result) if (in_def || in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) result end def _reduce_81(val, _values, result) if (in_def || in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) result end def _reduce_82(val, _values, result) backref_assign_error val[0] result end def _reduce_83(val, _values, result) result = assignable val[0] result end def _reduce_84(val, _values, result) result = aryset val[0], val[2] result end def _reduce_85(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_86(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_87(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_88(val, _values, result) if (in_def || in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) result end def _reduce_89(val, _values, result) if (in_def || in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) result end def _reduce_90(val, _values, result) backref_assign_error val[0] result end def _reduce_91(val, _values, result) yyerror "class/module name must be CONSTANT" result end # reduce 92 omitted def _reduce_93(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_94(val, _values, result) result = val[0].to_sym result end def _reduce_95(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end # reduce 96 omitted # reduce 97 omitted # reduce 98 omitted def _reduce_99(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end def _reduce_100(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end # reduce 101 omitted # reduce 102 omitted def _reduce_103(val, _values, result) result = s(:lit, val[0].to_sym) result end # reduce 104 omitted def _reduce_105(val, _values, result) result = new_undef val[0] result end def _reduce_106(val, _values, result) lexer.lex_state = :expr_fname result end def _reduce_107(val, _values, result) result = new_undef val[0], val[3] result end # reduce 108 omitted # reduce 109 omitted # reduce 110 omitted # reduce 111 omitted # reduce 112 omitted # reduce 113 omitted # reduce 114 omitted # reduce 115 omitted # reduce 116 omitted # reduce 117 omitted # reduce 118 omitted # reduce 119 omitted # reduce 120 omitted # reduce 121 omitted # reduce 122 omitted # reduce 123 omitted # reduce 124 omitted # reduce 125 omitted # reduce 126 omitted # reduce 127 omitted # reduce 128 omitted # reduce 129 omitted # reduce 130 omitted # reduce 131 omitted # reduce 132 omitted # reduce 133 omitted # reduce 134 omitted # reduce 135 omitted # reduce 136 omitted # reduce 137 omitted # reduce 138 omitted # reduce 139 omitted # reduce 140 omitted # reduce 141 omitted # reduce 142 omitted # reduce 143 omitted # reduce 144 omitted # reduce 145 omitted # reduce 146 omitted # reduce 147 omitted # reduce 148 omitted # reduce 149 omitted # reduce 150 omitted # reduce 151 omitted # reduce 152 omitted # reduce 153 omitted # reduce 154 omitted # reduce 155 omitted # reduce 156 omitted # reduce 157 omitted # reduce 158 omitted # reduce 159 omitted # reduce 160 omitted # reduce 161 omitted # reduce 162 omitted # reduce 163 omitted # reduce 164 omitted # reduce 165 omitted # reduce 166 omitted # reduce 167 omitted # reduce 168 omitted # reduce 169 omitted # reduce 170 omitted # reduce 171 omitted # reduce 172 omitted # reduce 173 omitted def _reduce_174(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_175(val, _values, result) result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) # result.line = val[0].line result end def _reduce_176(val, _values, result) result = new_op_asgn val result end def _reduce_177(val, _values, result) result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) val[2].sexp_type = :arglist if val[2] result end def _reduce_178(val, _values, result) result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) result end def _reduce_179(val, _values, result) result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) result end def _reduce_180(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) result end def _reduce_181(val, _values, result) yyerror "constant re-assignment" result end def _reduce_182(val, _values, result) yyerror "constant re-assignment" result end def _reduce_183(val, _values, result) backref_assign_error val[0] result end def _reduce_184(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end result end def _reduce_185(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end result end def _reduce_186(val, _values, result) result = new_call val[0], :+, argl(val[2]) result end def _reduce_187(val, _values, result) result = new_call val[0], :-, argl(val[2]) result end def _reduce_188(val, _values, result) result = new_call val[0], :*, argl(val[2]) result end def _reduce_189(val, _values, result) result = new_call val[0], :"/", argl(val[2]) result end def _reduce_190(val, _values, result) result = new_call val[0], :"%", argl(val[2]) result end def _reduce_191(val, _values, result) result = new_call val[0], :**, argl(val[2]) result end def _reduce_192(val, _values, result) result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") result end def _reduce_193(val, _values, result) result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") result end def _reduce_194(val, _values, result) if val[1].sexp_type == :lit then result = val[1] else result = new_call val[1], :"+@" end result end def _reduce_195(val, _values, result) result = new_call val[1], :"-@" result end def _reduce_196(val, _values, result) result = new_call val[0], :"|", argl(val[2]) result end def _reduce_197(val, _values, result) result = new_call val[0], :"^", argl(val[2]) result end def _reduce_198(val, _values, result) result = new_call val[0], :"&", argl(val[2]) result end def _reduce_199(val, _values, result) result = new_call val[0], :"<=>", argl(val[2]) result end def _reduce_200(val, _values, result) result = new_call val[0], :">", argl(val[2]) result end def _reduce_201(val, _values, result) result = new_call val[0], :">=", argl(val[2]) result end def _reduce_202(val, _values, result) result = new_call val[0], :"<", argl(val[2]) result end def _reduce_203(val, _values, result) result = new_call val[0], :"<=", argl(val[2]) result end def _reduce_204(val, _values, result) result = new_call val[0], :"==", argl(val[2]) result end def _reduce_205(val, _values, result) result = new_call val[0], :"===", argl(val[2]) result end def _reduce_206(val, _values, result) val[0] = value_expr val[0] # TODO: port call_op and clean these val[2] = value_expr val[2] result = s(:not, new_call(val[0], :"==", argl(val[2]))) result end def _reduce_207(val, _values, result) result = new_match val[0], val[2] result end def _reduce_208(val, _values, result) result = s(:not, new_match(val[0], val[2])) result end def _reduce_209(val, _values, result) result = s(:not, val[1]) result end def _reduce_210(val, _values, result) val[2] = value_expr val[2] result = new_call val[1], :"~" result end def _reduce_211(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) result end def _reduce_212(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) result end def _reduce_213(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_214(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_215(val, _values, result) result = s(:defined, val[2]) result end def _reduce_216(val, _values, result) result = s(:if, val[0], val[2], val[4]) result end # reduce 217 omitted def _reduce_218(val, _values, result) result = value_expr(val[0]) result end # reduce 219 omitted def _reduce_220(val, _values, result) warning 'parenthesize argument(s) for future version' result = s(:array, val[0]) result end def _reduce_221(val, _values, result) result = val[0] result end def _reduce_222(val, _values, result) result = arg_concat val[0], val[3] result end def _reduce_223(val, _values, result) result = s(:array, s(:hash, *val[0].values)) result end def _reduce_224(val, _values, result) result = s(:array, s(:splat, val[1])) result end def _reduce_225(val, _values, result) result = val[1] result end def _reduce_226(val, _values, result) result = val[1] result end def _reduce_227(val, _values, result) warning "parenthesize argument(s) for future version" result = s(:array, val[1]) result end def _reduce_228(val, _values, result) warning "parenthesize argument(s) for future version" result = val[1].add val[3] result end # reduce 229 omitted # reduce 230 omitted def _reduce_231(val, _values, result) warning "parenthesize argument(s) for future version" result = s(:array, val[0]) result end def _reduce_232(val, _values, result) result = arg_blk_pass val[0], val[1] result end def _reduce_233(val, _values, result) result = arg_concat val[0], val[3] result = arg_blk_pass result, val[4] result end def _reduce_234(val, _values, result) result = s(:array, s(:hash, *val[0].values)) result = arg_blk_pass result, val[1] result end def _reduce_235(val, _values, result) result = arg_concat s(:array, s(:hash, *val[0].values)), val[3] result = arg_blk_pass result, val[4] result end def _reduce_236(val, _values, result) result = val[0] << s(:hash, *val[2].values) result = arg_blk_pass result, val[3] result end def _reduce_237(val, _values, result) val[0] << s(:hash, *val[2].values) result = arg_concat val[0], val[5] result = arg_blk_pass result, val[6] result end def _reduce_238(val, _values, result) result = arg_blk_pass s(:splat, val[1]), val[2] result end # reduce 239 omitted def _reduce_240(val, _values, result) args = list_prepend val[0], val[2] result = arg_blk_pass args, val[3] result end def _reduce_241(val, _values, result) result = arg_blk_pass val[0], val[2] result end def _reduce_242(val, _values, result) result = arg_concat s(:array, val[0]), val[3] result = arg_blk_pass result, val[4] result end def _reduce_243(val, _values, result) result = arg_concat s(:array, val[0], s(:hash, *val[2].values)), val[5] result = arg_blk_pass result, val[6] result end def _reduce_244(val, _values, result) result = s(:array, s(:hash, *val[0].values)) result = arg_blk_pass result, val[1] result end def _reduce_245(val, _values, result) result = s(:array, s(:hash, *val[0].values), val[3]) result = arg_blk_pass result, val[4] result end def _reduce_246(val, _values, result) result = s(:array, val[0], s(:hash, *val[2].values)) result = arg_blk_pass result, val[3] result end def _reduce_247(val, _values, result) arg_value, _, args, _, assocs, opt_block = val result = s(:array, arg_value).add_all(args) result.add(s(:hash, *assocs.sexp_body)) result = arg_blk_pass result, opt_block result end def _reduce_248(val, _values, result) result = arg_concat s(:array, val[0]).add(s(:hash, *val[2].sexp_body)), val[5] result = arg_blk_pass result, val[6] result end def _reduce_249(val, _values, result) result = arg_concat s(:array, val[0]).add_all(val[2]).add(s(:hash, *val[4].values)), val[7] result = arg_blk_pass result, val[8] result end def _reduce_250(val, _values, result) result = arg_blk_pass s(:splat, val[1]), val[2] result end # reduce 251 omitted def _reduce_252(val, _values, result) result = lexer.cmdarg.stack.dup lexer.cmdarg.push true result end def _reduce_253(val, _values, result) lexer.cmdarg.stack.replace val[0] result = val[1] result end # reduce 254 omitted def _reduce_255(val, _values, result) lexer.lex_state = :expr_endarg result end def _reduce_256(val, _values, result) warning "don't put space before argument parentheses" result = nil result end def _reduce_257(val, _values, result) lexer.lex_state = :expr_endarg result end def _reduce_258(val, _values, result) warning "don't put space before argument parentheses" result = val[1] result end def _reduce_259(val, _values, result) result = s(:block_pass, val[1]) result end def _reduce_260(val, _values, result) result = val[1] result end # reduce 261 omitted def _reduce_262(val, _values, result) result = s(:array, val[0]) result end def _reduce_263(val, _values, result) result = list_append val[0], val[2] result end def _reduce_264(val, _values, result) result = val[0] << val[2] result end def _reduce_265(val, _values, result) result = arg_concat val[0], val[3] result end def _reduce_266(val, _values, result) result = s(:splat, val[1]) result end # reduce 267 omitted # reduce 268 omitted # reduce 269 omitted # reduce 270 omitted # reduce 271 omitted # reduce 272 omitted # reduce 273 omitted # reduce 274 omitted def _reduce_275(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_276(val, _values, result) result = self.lexer.lineno result end def _reduce_277(val, _values, result) unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] result end def _reduce_278(val, _values, result) lexer.lex_state = :expr_endarg result end def _reduce_279(val, _values, result) warning "(...) interpreted as grouped expression" result = val[1] result end def _reduce_280(val, _values, result) result = val[1] || s(:nil) result.paren = true result end def _reduce_281(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end def _reduce_282(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_283(val, _values, result) result = new_aref val result end def _reduce_284(val, _values, result) result = val[1] || s(:array) result end def _reduce_285(val, _values, result) result = self.lexer.lineno result end def _reduce_286(val, _values, result) result = new_hash val result end def _reduce_287(val, _values, result) result = s(:return) result end def _reduce_288(val, _values, result) result = new_yield val[2] result end def _reduce_289(val, _values, result) result = new_yield result end def _reduce_290(val, _values, result) result = new_yield result end def _reduce_291(val, _values, result) result = s(:defined, val[3]) result end def _reduce_292(val, _values, result) oper, iter = val[0], val[1] call = new_call(nil, oper.to_sym) iter.insert 1, call result = iter call.line = iter.line result end # reduce 293 omitted def _reduce_294(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call result = iter result end def _reduce_295(val, _values, result) result = new_if val[1], val[3], val[4] result end def _reduce_296(val, _values, result) result = new_if val[1], val[4], val[3] result end def _reduce_297(val, _values, result) lexer.cond.push true result end def _reduce_298(val, _values, result) lexer.cond.pop result end def _reduce_299(val, _values, result) result = new_while val[5], val[2], true result end def _reduce_300(val, _values, result) lexer.cond.push true result end def _reduce_301(val, _values, result) lexer.cond.pop result end def _reduce_302(val, _values, result) result = new_until val[5], val[2], true result end def _reduce_303(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_304(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_305(val, _values, result) (_, line), _, _, elsebody, _ = val result = new_case nil, elsebody, line result end def _reduce_306(val, _values, result) lexer.cond.push true result end def _reduce_307(val, _values, result) lexer.cond.pop result end def _reduce_308(val, _values, result) result = new_for val[4], val[1], val[7] result end def _reduce_309(val, _values, result) result = self.lexer.lineno result end def _reduce_310(val, _values, result) self.comments.push self.lexer.comments if (in_def || in_single > 0) then yyerror "class definition in method body" end self.env.extend result end def _reduce_311(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_312(val, _values, result) result = self.lexer.lineno result end def _reduce_313(val, _values, result) result = in_def self.in_def = false result end def _reduce_314(val, _values, result) result = in_single self.in_single = 0 self.env.extend result end def _reduce_315(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_316(val, _values, result) result = self.lexer.lineno result end def _reduce_317(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if in_def or in_single > 0 self.env.extend result end def _reduce_318(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_319(val, _values, result) result = self.in_def self.comments.push self.lexer.comments self.in_def = true self.env.extend result end def _reduce_320(val, _values, result) in_def = val[2] result = new_defn val self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body result end def _reduce_321(val, _values, result) self.comments.push self.lexer.comments lexer.lex_state = :expr_fname result end def _reduce_322(val, _values, result) self.in_single += 1 self.env.extend lexer.lex_state = :expr_end # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] result end def _reduce_323(val, _values, result) line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body result end def _reduce_324(val, _values, result) result = s(:break) result end def _reduce_325(val, _values, result) result = s(:next) result end def _reduce_326(val, _values, result) result = s(:redo) result end def _reduce_327(val, _values, result) result = s(:retry) result end def _reduce_328(val, _values, result) result = value_expr(val[0]) result end # reduce 329 omitted # reduce 330 omitted # reduce 331 omitted # reduce 332 omitted # reduce 333 omitted # reduce 334 omitted # reduce 335 omitted # reduce 336 omitted def _reduce_337(val, _values, result) result = s(:if, val[1], val[3], val[4]) result end # reduce 338 omitted def _reduce_339(val, _values, result) result = val[1] result end # reduce 340 omitted def _reduce_341(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end def _reduce_342(val, _values, result) result = s(:array, clean_mlhs(val[0])) result end def _reduce_343(val, _values, result) result = list_append val[0], clean_mlhs(val[2]) result end def _reduce_344(val, _values, result) result = block_var18 val[0], nil, nil result end def _reduce_345(val, _values, result) result = block_var18 val[0], nil, nil result end def _reduce_346(val, _values, result) result = block_var18 val[0], nil, val[3] result end def _reduce_347(val, _values, result) result = block_var18 val[0], val[3], val[6] result end def _reduce_348(val, _values, result) result = block_var18 val[0], s(:splat), val[5] result end def _reduce_349(val, _values, result) result = block_var18 val[0], val[3], nil result end def _reduce_350(val, _values, result) result = block_var18 val[0], s(:splat), nil result end def _reduce_351(val, _values, result) result = block_var18 nil, val[1], val[4] result end def _reduce_352(val, _values, result) result = block_var18 nil, s(:splat), val[3] result end def _reduce_353(val, _values, result) result = block_var18 nil, val[1], nil result end def _reduce_354(val, _values, result) result = block_var18 nil, s(:splat), nil result end def _reduce_355(val, _values, result) result = block_var18 nil, nil, val[1] result end def _reduce_356(val, _values, result) result = 0 result end def _reduce_357(val, _values, result) result = s(:args) self.lexer.command_start = true result end def _reduce_358(val, _values, result) result = s(:args) self.lexer.command_start = true result end def _reduce_359(val, _values, result) result = val[1] self.lexer.command_start = true result end def _reduce_360(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_361(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_362(val, _values, result) vars = val[2] body = val[4] result = new_iter nil, vars, body result.line = val[1] self.env.unextend result end def _reduce_363(val, _values, result) block_dup_check val[0], val[1] result = val[1] result.insert 1, val[0] result end def _reduce_364(val, _values, result) result = new_call val[0], val[2], val[3] result end def _reduce_365(val, _values, result) result = new_call val[0], val[2], val[3] result end def _reduce_366(val, _values, result) result = self.lexer.lineno result end def _reduce_367(val, _values, result) result = new_call nil, val[0].to_sym, val[2] result end def _reduce_368(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_369(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_370(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_371(val, _values, result) result = new_super val[1] result end def _reduce_372(val, _values, result) result = s(:zsuper) result end def _reduce_373(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_374(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_375(val, _values, result) # REFACTOR args = val[2] body = val[4] result = new_iter nil, args, body self.env.unextend result.line = val[1] result end def _reduce_376(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_377(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_378(val, _values, result) args = val[2] body = val[4] result = new_iter nil, args, body self.env.unextend result.line = val[1] result end def _reduce_379(val, _values, result) result = self.lexer.lineno result end def _reduce_380(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] result end # reduce 381 omitted def _reduce_382(val, _values, result) result = list_append val[0], s(:splat, val[3]) result end def _reduce_383(val, _values, result) result = s(:array, s(:splat, val[1])) result end # reduce 384 omitted # reduce 385 omitted def _reduce_386(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above result end def _reduce_387(val, _values, result) result = nil result end def _reduce_388(val, _values, result) result = s(:array, val[0]) result end # reduce 389 omitted # reduce 390 omitted def _reduce_391(val, _values, result) result = val[1] result end # reduce 392 omitted def _reduce_393(val, _values, result) if (val[1] != nil) then result = val[1] else result = s(:nil) end result end # reduce 394 omitted def _reduce_395(val, _values, result) result = s(:lit, val[0]) result end def _reduce_396(val, _values, result) result = s(:lit, val[0]) result end # reduce 397 omitted def _reduce_398(val, _values, result) val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] result end # reduce 399 omitted def _reduce_400(val, _values, result) result = literal_concat val[0], val[1] result end def _reduce_401(val, _values, result) result = val[1] result end def _reduce_402(val, _values, result) result = new_string val result end def _reduce_403(val, _values, result) result = new_xstring val[1] result end def _reduce_404(val, _values, result) result = new_regexp val result end def _reduce_405(val, _values, result) result = s(:array) result end def _reduce_406(val, _values, result) result = val[1] result end def _reduce_407(val, _values, result) result = new_word_list result end def _reduce_408(val, _values, result) result = val[0] << new_word_list_entry(val) result end # reduce 409 omitted def _reduce_410(val, _values, result) result = literal_concat val[0], val[1] result end def _reduce_411(val, _values, result) result = s(:array) result end def _reduce_412(val, _values, result) result = val[1] result end def _reduce_413(val, _values, result) result = new_qword_list result end def _reduce_414(val, _values, result) result = val[0] << new_qword_list_entry(val) result end def _reduce_415(val, _values, result) result = s(:str, "") result end def _reduce_416(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_417(val, _values, result) result = nil result end def _reduce_418(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_419(val, _values, result) result = new_string val result end def _reduce_420(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg result end def _reduce_421(val, _values, result) lexer.lex_strterm = val[1] result = s(:evstr, val[2]) result end def _reduce_422(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_beg result end def _reduce_423(val, _values, result) _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else raise "unknown string body: #{stmt.inspect}" end result end def _reduce_424(val, _values, result) result = s(:gvar, val[0].to_sym) result end def _reduce_425(val, _values, result) result = s(:ivar, val[0].to_sym) result end def _reduce_426(val, _values, result) result = s(:cvar, val[0].to_sym) result end # reduce 427 omitted def _reduce_428(val, _values, result) lexer.lex_state = :expr_end result = val[1].to_sym result end def _reduce_429(val, _values, result) result = val[0].to_sym result end # reduce 430 omitted # reduce 431 omitted # reduce 432 omitted # reduce 433 omitted def _reduce_434(val, _values, result) lexer.lex_state = :expr_end result = val[1] yyerror "empty symbol literal" if result.nil? or result.empty? case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) else result = s(:dsym, "", result) end result end # reduce 435 omitted # reduce 436 omitted def _reduce_437(val, _values, result) result = -val[1] # TODO: pt_testcase result end def _reduce_438(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 439 omitted # reduce 440 omitted # reduce 441 omitted # reduce 442 omitted # reduce 443 omitted def _reduce_444(val, _values, result) result = s(:nil) result end def _reduce_445(val, _values, result) result = s(:self) result end def _reduce_446(val, _values, result) result = s(:true) result end def _reduce_447(val, _values, result) result = s(:false) result end def _reduce_448(val, _values, result) result = s(:str, self.file) result end def _reduce_449(val, _values, result) result = s(:lit, lexer.lineno) result end def _reduce_450(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_451(val, _values, result) result = assignable val[0] result end def _reduce_452(val, _values, result) result = s(:nth_ref, val[0]) result end def _reduce_453(val, _values, result) result = s(:back_ref, val[0]) result end def _reduce_454(val, _values, result) result = nil result end def _reduce_455(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_456(val, _values, result) result = val[2] result end def _reduce_457(val, _values, result) yyerrok result = nil result end def _reduce_458(val, _values, result) result = val[1] lexer.lex_state = :expr_beg self.lexer.command_start = true result end def _reduce_459(val, _values, result) result = val[0] result end def _reduce_460(val, _values, result) result = args val result end def _reduce_461(val, _values, result) result = args val result end def _reduce_462(val, _values, result) result = args val result end def _reduce_463(val, _values, result) result = args val result end def _reduce_464(val, _values, result) result = args val result end def _reduce_465(val, _values, result) result = args val result end def _reduce_466(val, _values, result) result = args val result end def _reduce_467(val, _values, result) result = args val result end def _reduce_468(val, _values, result) result = args val result end def _reduce_469(val, _values, result) yyerror "formal argument cannot be a constant" result end def _reduce_470(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_471(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_472(val, _values, result) yyerror "formal argument cannot be a class variable" result end def _reduce_473(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = val[0] result end def _reduce_474(val, _values, result) result = s(:args) result << val[0].to_sym result end def _reduce_475(val, _values, result) val[0] << val[2].to_sym result = val[0] result end def _reduce_476(val, _values, result) result = assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_477(val, _values, result) result = s(:block, val[0]) result end def _reduce_478(val, _values, result) result = block_append val[0], val[2] result end # reduce 479 omitted # reduce 480 omitted def _reduce_481(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym assignable name result = :"*#{name}" result end def _reduce_482(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 483 omitted # reduce 484 omitted def _reduce_485(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = s(:block_arg, identifier.to_sym) result end def _reduce_486(val, _values, result) result = val[1] result end def _reduce_487(val, _values, result) result = nil result end # reduce 488 omitted def _reduce_489(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_490(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit result end def _reduce_491(val, _values, result) result = s(:array) result end def _reduce_492(val, _values, result) result = val[0] result end def _reduce_493(val, _values, result) size = val[0].size if (size % 2 != 1) then # != 1 because of leading :array yyerror "Odd number (#{size}) list for Hash. #{val[0].inspect}" end result = val[0] result end # reduce 494 omitted def _reduce_495(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result end def _reduce_496(val, _values, result) result = s(:array, val[0], val[2]) result end # reduce 497 omitted # reduce 498 omitted # reduce 499 omitted # reduce 500 omitted # reduce 501 omitted # reduce 502 omitted # reduce 503 omitted # reduce 504 omitted # reduce 505 omitted # reduce 506 omitted # reduce 507 omitted # reduce 508 omitted # reduce 509 omitted # reduce 510 omitted # reduce 511 omitted # reduce 512 omitted # reduce 513 omitted # reduce 514 omitted # reduce 515 omitted def _reduce_516(val, _values, result) yyerrok result end # reduce 517 omitted # reduce 518 omitted def _reduce_519(val, _values, result) yyerrok result end def _reduce_520(val, _values, result) result = nil result end def _reduce_none(val, _values, result) val[0] end end # class Ruby18Parser ruby_parser-3.11.0/lib/ruby24_parser.rb0000644000004100000410000077413413277753330020011 0ustar www-datawww-data# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.14 # from Racc grammer file "". # require 'racc/parser.rb' class Ruby24Parser < RubyParser::Parser require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ##### State transition tables begin ### clist = [ '-607,272,530,-101,-104,-98,272,-607,-607,-607,757,272,222,-607,-607', '-616,-607,94,95,-105,-84,83,223,-104,-507,-607,666,630,585,84,748,-507', '627,116,749,-70,-607,-607,115,-607,-607,-607,-607,-607,-96,-100,116', '826,223,591,223,115,-91,-92,-94,-103,-100,457,-99,-105,665,856,826,585', '-103,585,-98,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607', '-607,-607,-607,737,-604,-607,-607,-607,709,650,271,-604,629,-607,-99', '271,-607,626,96,97,271,-607,505,-607,-264,-607,-607,-607,-607,-607,-607', '-607,-89,-607,-607,-607,-106,503,756,-101,-104,-91,-92,-94,-101,-104', '-96,-504,-607,-607,-95,-93,-106,-607,-504,-504,-504,116,-102,-504,-504', '-504,115,-504,116,-607,-102,940,-105,115,585,-504,-91,-504,-504,-504', '-91,-92,-94,-91,-92,-94,-94,-504,-504,-90,-504,-504,-504,-504,-504,585', '-100,-263,-91,-92,-94,-100,-93,116,-103,116,-98,116,115,-103,115,-98', '115,-101,-106,500,-519,708,-504,-504,-504,-504,-504,-504,-504,-504,-504', '-504,-504,-504,-504,-504,-99,737,-504,-504,-504,-99,-504,-504,-603,737', '-504,887,-102,-504,-504,272,-504,791,-504,792,-504,772,-504,-504,-504', '-504,-504,-504,-504,771,-504,770,-504,219,220,888,-603,-93,-106,94,95', '-99,274,-106,-102,-504,-504,-504,-504,-102,-504,-601,-504,265,-105,-518', '116,-507,530,-105,266,115,-504,-504,-507,-507,-507,219,220,-507,-507', '-507,-93,-507,-101,-93,-103,116,-603,666,-418,-507,115,-507,-507,-507', '-92,-97,219,220,-93,490,-100,-507,-507,222,-507,-507,-507,-507,-507', '116,271,116,-507,890,115,714,115,116,611,-507,-98,665,115,-105,-601', '-93,96,97,-507,666,893,223,-507,-507,-507,-507,-507,-507,-507,-507,-507', '-507,-507,-507,-507,-507,-601,-518,-507,-507,-507,666,-507,-507,542', '223,-507,544,1010,-507,-507,611,-507,665,-507,223,-507,-600,-507,-507', '-507,-507,-507,-507,-507,265,-507,-507,-507,613,612,609,266,215,-519', '665,223,856,826,-89,1017,-507,-507,-507,-507,611,-507,116,-507,1015', '681,243,115,-607,-98,896,-510,898,-507,-507,-607,-607,-607,-510,570', '-607,-607,-607,542,-607,-504,541,613,612,631,573,-90,-504,-607,-607', '-607,-607,-600,240,219,220,-504,242,241,-607,-607,-99,-607,-607,-607', '-607,-607,565,216,562,561,560,542,563,-600,544,613,612,581,580,565,777', '562,561,560,767,563,900,-607,223,-607,-607,-607,-607,-607,-607,-607', '-607,-607,-607,-607,-607,-607,-607,217,-504,-607,-607,-607,215,793,-607', '574,902,-607,903,454,-607,-607,611,-607,459,-607,-91,-607,455,-607,-607', '-607,-607,-607,-607,-607,570,-607,-607,-607,542,-100,458,544,-607,611', '456,573,986,-97,611,-607,-607,-607,-607,-607,-603,-607,-289,-607,-607', '852,696,116,-106,-289,-289,-289,115,-607,-102,-289,-289,911,-289,-337', '-262,216,-607,915,581,580,-337,613,612,243,-290,219,220,215,917,-337', '769,-290,-289,-289,967,-289,-289,-289,-289,-289,-290,-289,918,753,613', '612,624,-607,-289,613,612,619,574,-604,644,240,643,-289,611,242,241', '616,223,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289', '-289,-289,215,-337,-289,-289,-289,714,649,594,921,116,-289,923,-290', '-289,115,216,592,925,-289,-94,-289,-92,-289,-289,-289,-289,-289,-289', '-289,-289,-289,215,-289,-290,-103,927,-101,927,523,223,-290,611,613', '612,-289,-289,-289,521,-95,-290,-289,-289,-289,-289,219,220,-289,-289', '-289,-514,-289,-517,-289,-104,933,216,-514,-509,-517,-513,-289,-289', '-289,409,-509,-516,-513,-517,411,410,-289,-289,-516,-289,-289,-289,-289', '-289,-504,740,-512,-516,-511,215,215,-504,216,-512,-290,-511,967,214', '613,612,614,581,580,219,220,753,212,-289,-289,-289,-289,-289,-289,-289', '-289,-289,-289,-289,-289,-289,-289,935,-517,-289,-289,-289,-515,794', '-289,591,937,-289,733,-515,-289,-289,-516,-289,611,-289,412,-289,407', '-289,-289,-289,-289,-289,-289,-289,391,-289,116,-289,216,216,731,115', '565,223,562,561,560,570,563,-289,-289,-289,-289,-289,388,-289,-289,-289', '573,385,947,-604,-281,948,223,-289,951,-289,-104,-281,-281,-281,-265', '730,-281,-281,-281,382,-281,215,568,729,618,613,612,609,533,721,-281', '-281,-281,581,580,215,719,455,717,961,-281,-281,751,-281,-281,-281,-281', '-281,358,715,968,753,969,714,-280,971,-289,972,711,223,964,-280,562', '561,560,505,563,574,705,622,-280,-281,-281,-281,-281,-281,-281,-281', '-281,-281,-281,-281,-281,-281,-281,702,216,-281,-281,-281,701,988,-281', '322,990,-281,991,625,-281,-281,216,-281,628,-281,995,-281,696,-281,-281', '-281,-281,-281,-281,-281,714,-281,1000,-281,565,-280,562,561,560,570', '563,119,120,121,122,123,-281,-281,-281,-281,573,-281,-426,-281,119,120', '121,122,123,-426,-426,-426,1002,-281,-426,-426,-426,565,-426,562,561', '560,568,563,1004,1006,1006,-426,-426,-426,535,879,880,581,580,881,110', '111,-426,-426,223,-426,-426,-426,-426,-426,565,1013,562,561,560,321', '563,262,635,723,1018,565,685,562,561,560,1019,563,726,927,927,574,927', '-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426', '1024,723,-426,-426,-426,-84,988,-426,223,274,-426,218,723,-426,-426', '-262,-426,637,-426,223,-426,726,-426,-426,-426,-426,-426,-426,-426,243', '-426,-426,-426,641,223,565,-604,562,561,560,-603,563,701,223,-609,-426', '-426,642,-426,243,-426,-609,-609,-609,211,243,-609,-609,-609,243,-609', '240,-426,243,988,242,241,238,239,-609,-609,-609,-609,723,1047,257,258', '1048,1049,1050,-609,-609,932,-609,-609,-609,-609,-609,1006,1006,1006', '240,223,246,210,242,241,238,239,209,927,244,565,245,562,561,560,988', '563,243,112,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609', '-609,-609,505,274,-609,-609,-609,539,243,-609,503,696,-609,223,531,-609', '-609,723,-609,653,-609,274,-609,527,-609,-609,-609,-609,-609,-609,-609', '1006,-609,-609,-609,565,274,562,561,560,570,563,119,120,121,122,123', '-609,-609,-609,-609,573,-609,-297,-609,119,120,121,122,123,-297,-297', '-297,696,-609,-297,-297,-297,262,-297,243,796,565,568,562,561,560,243', '563,-297,-297,274,826,3,581,580,257,258,223,-297,-297,223,-297,-297', '-297,-297,-297,964,277,562,561,560,240,563,246,223,242,241,238,239,723', '223,244,565,245,562,561,560,574,563,-297,-297,-297,-297,-297,-297,-297', '-297,-297,-297,-297,-297,-297,-297,545,243,-297,-297,-297,490,850,-297', '223,277,-297,826,860,-297,-297,524,-297,723,-297,223,-297,490,-297,-297', '-297,-297,-297,-297,-297,591,-297,401,-297,240,517,516,595,242,241,238', '239,778,596,223,-608,-297,-297,-69,-297,,-297,-608,-608,-608,,,-608', '-608,-608,243,-608,565,-297,562,561,560,,563,,-608,-608,-608,-608,,', '257,258,,,,-608,-608,,-608,-608,-608,-608,-608,,,,240,,246,,242,241', '238,239,723,,244,,245,,,,,,,,-608,-608,-608,-608,-608,-608,-608,-608', '-608,-608,-608,-608,-608,-608,,,-608,-608,-608,,,-608,,,-608,,,-608', '-608,,-608,,-608,,-608,,-608,-608,-608,-608,-608,-608,-608,,-608,-608', '-608,565,,562,561,560,570,563,,,,,,-608,-608,-608,-608,573,-608,-627', '-608,,,,,,-627,-627,-627,,-608,-627,-627,-627,,-627,243,,,568,,,,,-627', '-627,-627,,,,581,580,257,258,,-627,-627,,-627,-627,-627,-627,-627,,', ',,,240,,246,,242,241,238,239,,,244,,245,,,,574,,-627,-627,-627,-627', '-627,-627,-627,-627,-627,-627,-627,-627,-627,-627,,,-627,-627,-627,', ',-627,,274,-627,,,-627,-627,,-627,,-627,,-627,,-627,-627,-627,-627,-627', '-627,-627,,-627,-627,-627,,,,,,,,,,,,,-627,-627,,-627,,-627,297,72,73', '74,12,60,,,,66,67,-627,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,654,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', ',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,-239,,,65', ',,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,654,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', '251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240', ',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', '92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70', ',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,638,11', '48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243', '247,252,253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36', ',,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91', '83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74', '12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94', '95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,', '257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248', '244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96', '97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255', '256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241', '238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65', ',,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', '251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240', ',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', '92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70', ',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48', ',13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247', '252,253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61', '62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83', '85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', '258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', '23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', '297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', ',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', '88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', '259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', '47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', ',261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', '253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62', ',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', '86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60', ',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', ',22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', '258,,43,,,299,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', '23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', '297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', ',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', '88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', '259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', '47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', ',261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', '253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62', ',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', '86,87,89,,,,84,92,223,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', '258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', '23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', '297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', ',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', '88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', ',,255,256,,,,,,257,258,,43,,,299,,,61,62,,,63,,38,240,,246,47,242,241', '238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', '251,259,260,255,256,,-628,-628,,,257,258,,43,,,36,,,61,62,,,63,,38,240', ',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', '253,254,249,251,259,260,255,256,,-628,-628,,,257,258,,43,,,36,,,61,62', ',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,', '66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', ',,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,,,,257,258,,43,', ',36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,8,72,73,74', '12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,22,,,,,,11,48,10,13,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,,,,257', '258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', '23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297', '72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,', ',,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250', '248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628', '-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', ',,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259', ',255,256,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241', '238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,243,-628,-628,-628,-628', '249,251,,,-628,-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', '47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,8,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,-628,-628', '-628,-628,249,251,,,-628,-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38', '240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11', '48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243', ',,,,,,,,,,,,,,,257,258,,43,,,299,,243,61,62,,,63,,38,240,,246,47,242', '241,238,239,257,258,,23,,,,,91,83,85,86,87,89,,,240,84,92,,242,241,238', '239,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69', '71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,,,,,,,,,', ',,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239', ',,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297', '72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,', '47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290', '102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,', '63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', ',291,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', ',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', ',228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87', '89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,', ',70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,', '48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,', ',,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,', ',,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94', '95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47', ',,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,', ',96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290', '102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,', '63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', ',291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,', ',304,,,61,62,,,63,,303,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,', ',,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308', ',,234,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,320', ',,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,678,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,', ',,,978,,,234,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,,,47,,,,,', ',,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,116,,,,,115,65,,,81,88,90,,', '96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,352,,,36,,,61,62,,,63,', '38,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,', '96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,905,,,234,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', '290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62', ',,63,,,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', ',291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', '36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,401,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', ',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,417,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', ',228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87', '89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,', ',70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,', '48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,', ',,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,', ',,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,417,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', ',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,223,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', ',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,', '235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,,,47,,,,,,,,233', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', '105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', ',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,417', ',,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,535,,61,62', ',,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', ',32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', ',63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,', '310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99', '101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61', '62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', ',228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,', ',84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,', '68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,', ',,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46', '44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,284,,47,,,,,,,,233,', ',,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', '105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,284', ',47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88', '90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,', '310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99', '101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61', '62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,597,59', '100,99,598,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,599,,,234,', ',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,597,59', '100,99,598,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,599,,,234,', ',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,775,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,', ',,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', '65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', '99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288', ',,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,287', '85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,', ',66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,,,47,,,,,', ',,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', '47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286', ',284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', ',,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61', '62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,', '32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99', '101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62', ',,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,401,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', '76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,284,,47,,,,,,,,233,,,,,91,287', '85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,', ',66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,284,,47,,', ',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', ',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', ',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', '76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,905,,,234', ',,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', '106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', '105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', ',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', '47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', ',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', ',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', '76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', '106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', '105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', ',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', '47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', ',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', ',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', '76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91', '287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', '106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,', ',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286', ',284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,223,,,,,,65,,291', '81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,', ',,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,', '22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,', '45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,', ',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,234,,,61,62,,,63,,,,', ',,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,519,,,65,,,81,88,90,,,96', '97,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201,205,206', '185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190', ',,,,,171,178,169,170,166,167,168,127,129,398,397,128,,399,,,,,,,161', '162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,', ',,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,', ',,,,,,,,,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', '180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', '199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', ',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', '150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', ',,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203', '204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202', '197,367,366,368,365,172,191,190,,,,,,171,178,169,170,362,363,364,360', '129,100,99,361,,102,,,,,,,161,162,,157,139,140,141,148,145,147,,,142', '143,,,,163,164,149,150,,,,,,374,,,,,,,,154,153,,138,160,156,155,151', '152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187,177,200', '173,193,183,182,203,204,198,181,180,175,201,205,206,185,174,188,192', '194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,,171,178', '169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148', '145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156', '155,151,152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187', '177,200,173,193,183,182,203,204,198,181,180,175,201,205,206,185,174', '188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,', '171,178,169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138', '160,156,155,151,152,146,144,136,159,137,,,165,91,,,,,,,,,,92,,,,,,,', ',158,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201,205', '206,185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191', '190,,,,,,171,178,169,170,166,167,168,127,129,126,,128,,,,,,,,,161,162', ',157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,', ',,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,91,,,', ',,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', '180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', '199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', ',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', '150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', ',,165,91,,,,-627,,,,,,92,-627,-627,-627,,,-627,-627,-627,158,-627,,', ',,,,,,-627,-627,,,,,,,,,,-627,-627,,-627,-627,-627,-627,-627,,,,,,,', '488,431,,,489,,,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143', '-627,,,163,164,149,150,-627,,,,,274,-627,,,,,,,154,153,,138,160,156', '155,151,152,146,144,136,159,137,-627,-627,165,,,,,1042,438,,,1043,,', '-627,,,,,-627,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', '136,159,137,,,165,,,,,656,431,,,657,,,,,,,,,161,162,158,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', ',138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,1040,431,,,1041', ',,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164', '149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', '159,137,,,165,,,,,658,438,,,659,,,,,,,,,161,162,158,157,139,140,141', '148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153,,138', '160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560,570,563', '565,,562,561,560,570,563,,,573,,,,,158,,573,,,,,,,,,,,,,,,568,,,,,,', '568,,1012,438,581,580,1011,,,578,577,581,580,,,161,162,,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,574,,,274,,,,574,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,689,431,', ',690,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', '136,159,137,,,165,,,,,692,438,,,693,,,,,,,,,161,162,158,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', ',138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560,570', '563,,,,,,,,,,573,,,,,158,,,,,,,,,,,,,,,,,568,761,656,431,,,657,,,578', '577,581,580,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,,,,274,,,,574,,,,154,153,,138,160,156,155,151,152,146', '144,136,159,137,,,165,,,,,658,438,,,659,,,,,,,,,161,162,158,157,139', '140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560', '570,563,565,,562,561,560,570,563,,,573,,,,,158,,573,565,,562,561,560', '570,563,565,,562,561,560,570,563,568,,573,,,,,568,,573,,581,580,,,,', ',581,580,,,,565,568,562,561,560,570,563,,568,,,,581,580,,,573,578,577', '581,580,565,574,562,561,560,570,563,565,574,562,561,560,570,563,,,573', '568,,,,,,573,,574,578,577,581,580,,565,574,562,561,560,570,563,568,', ',,,,,568,,573,,581,580,,,,578,577,581,580,,,,,574,,,,,,,568,,,,,,,,', '578,577,581,580,,574,,427,431,,,428,574,,,,,,,,161,162,,157,139,140', '141,148,145,147,,,142,143,,,574,163,164,149,150,,,,,,274,,,,,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,434,438,', ',433,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', '136,159,137,,,165,,,,,743,431,,,744,,,,,,,,,161,162,158,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', ',138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,745,438,,,746', ',,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164', '149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', '159,137,,565,165,562,561,560,570,563,565,,562,561,560,570,563,,,573', ',,,,158,,573,,,,,565,,562,561,560,570,563,,,,568,761,,,,,573,568,,578', '577,581,580,,,,578,577,581,580,,,,,,,,,568,,,,,,,,,488,431,581,580,489', ',,,574,,,,,161,162,574,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,574,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146', '144,136,159,137,,,165,,,,,864,438,,,865,,,,,,,,,161,162,158,157,139', '140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560', '570,563,565,,562,561,560,570,563,,,573,,,,,158,,573,565,,562,561,560', '570,563,,,,,,,,568,551,573,,,,,568,,578,577,581,580,,,,578,577,581,580', ',,,565,568,562,561,560,570,563,,,,578,577,581,580,,,573,,,,,,574,,,', ',,,574,,,,,,,,,568,,,,,,,,574,578,577,581,580,,,,,,,,,,,,,,,,,,,,,,', ',,223,,,,,,,,574' ] racc_action_table = arr = ::Array.new(26642, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '434,313,322,1040,1043,349,64,434,434,434,603,669,22,434,434,61,434,318', '318,595,684,80,290,746,361,434,670,392,861,80,599,361,389,757,599,684', '434,434,757,434,434,434,434,434,322,862,871,993,22,993,61,871,821,689', '690,744,1055,229,350,322,670,732,732,914,1041,936,975,434,434,434,434', '434,434,434,434,434,434,434,434,434,434,587,1043,434,434,434,550,434', '313,746,392,434,976,64,434,389,318,318,669,434,285,434,774,434,434,434', '434,434,434,434,349,434,434,434,229,282,603,1040,1043,821,689,690,1040', '1043,595,98,434,434,746,434,979,434,98,98,98,603,1042,98,98,98,603,98', '861,434,434,861,1018,861,342,98,862,98,98,98,821,689,690,821,689,690', '744,98,98,350,98,98,98,98,98,343,1055,636,821,689,690,1055,692,914,1041', '936,975,587,914,1041,936,975,587,743,353,281,227,550,98,98,98,98,98', '98,98,98,98,98,98,98,98,98,976,588,98,98,98,976,98,98,1042,863,98,779', '745,98,98,29,98,656,98,657,98,632,98,98,98,98,98,98,98,630,98,627,98', '764,764,795,692,692,979,44,44,227,270,979,1042,98,98,98,98,1042,98,598', '98,370,1018,226,342,101,456,1018,370,342,98,98,101,101,101,451,451,101', '101,101,692,101,656,692,657,343,745,486,29,101,343,101,101,101,743,353', '699,699,692,267,795,101,101,235,101,101,101,101,101,588,29,945,598,797', '588,798,945,863,507,598,226,486,863,456,598,745,44,44,598,494,800,764', '101,101,101,101,101,101,101,101,101,101,101,101,101,101,598,41,101,101', '101,495,101,101,704,962,101,704,962,101,101,394,101,494,101,451,101', '597,101,101,101,101,101,101,101,27,101,598,101,507,507,507,27,977,42', '495,699,1026,1026,41,977,101,101,101,101,620,101,762,101,977,507,462', '762,658,41,801,367,802,101,101,658,658,658,367,711,658,658,658,334,658', '597,334,394,394,394,711,42,597,658,658,658,658,597,462,341,341,597,462', '462,658,658,42,658,658,658,658,658,932,977,932,932,932,335,932,597,335', '620,620,711,711,726,639,726,726,726,620,726,804,864,805,658,658,658', '658,658,658,658,658,658,658,658,658,658,658,18,597,658,658,658,225,658', '658,711,806,658,807,225,658,658,623,658,231,658,639,658,225,658,658', '658,658,658,658,658,890,658,658,658,548,639,230,548,864,386,228,890', '932,18,383,864,658,658,658,658,864,658,433,658,864,726,820,294,18,433', '433,433,294,658,658,433,433,824,433,49,827,225,864,828,890,890,49,623', '623,463,524,538,538,966,833,49,623,524,433,433,966,433,433,433,433,433', '524,865,834,966,386,386,386,864,865,383,383,383,890,865,428,463,427', '865,380,463,463,380,835,433,433,433,433,433,433,433,433,433,433,433', '433,433,433,351,49,433,433,433,836,433,351,840,346,433,841,524,433,346', '966,351,843,433,428,433,427,433,433,433,433,433,433,433,865,433,307', '433,749,428,844,427,846,307,849,749,378,380,380,659,433,433,307,433', '749,433,659,659,659,758,758,659,659,659,362,659,306,433,433,851,351', '362,366,306,363,659,659,659,126,366,305,363,306,126,126,659,659,305', '659,659,659,659,659,360,590,365,305,368,904,17,360,307,365,749,368,904', '17,378,378,378,714,714,20,20,904,17,659,659,659,659,659,659,659,659', '659,659,659,659,659,659,854,306,659,659,659,364,659,659,589,857,659', '584,364,659,659,305,659,376,659,207,659,124,659,659,659,659,659,659', '659,90,659,5,659,904,17,582,5,1050,867,1050,1050,1050,1050,1050,693', '659,659,659,659,89,659,693,659,1050,88,872,693,59,873,874,693,883,659', '659,59,59,59,884,579,59,59,59,87,59,324,1050,575,382,376,376,376,324', '567,59,59,59,1050,1050,601,558,324,557,901,59,59,601,59,59,59,59,59', '72,556,905,601,906,554,309,908,693,909,553,48,1010,309,1010,1010,1010', '549,1010,1050,546,385,309,59,59,59,59,59,59,59,59,59,59,59,59,59,59', '537,324,59,59,59,536,934,59,43,938,59,939,388,59,59,601,59,391,59,944', '59,528,59,59,59,59,59,59,59,952,59,955,59,1019,309,1019,1019,1019,1019', '1019,9,9,9,9,9,59,59,59,59,1019,59,30,59,296,296,296,296,296,30,30,30', '956,59,30,30,30,568,30,568,568,568,1019,568,957,958,960,30,30,30,525', '765,765,1019,1019,765,765,765,30,30,520,30,30,30,30,30,1024,970,1024', '1024,1024,40,1024,25,413,568,978,723,518,723,723,723,981,723,568,982', '983,1019,984,30,30,30,30,30,30,30,30,30,30,30,30,30,30,985,1024,30,30', '30,515,987,30,514,30,30,19,723,30,30,416,30,418,30,422,30,723,30,30', '30,30,30,30,30,481,30,30,30,425,497,850,1011,850,850,850,1012,850,1014', '496,439,30,30,426,30,467,30,439,439,439,16,466,439,439,439,472,439,481', '30,465,1025,481,481,481,481,439,439,439,439,850,1030,472,472,1031,1032', '1033,439,439,850,439,439,439,439,439,1034,1035,1036,472,1039,472,15', '472,472,472,472,13,1044,472,988,472,988,988,988,1045,988,464,3,439,439', '439,439,439,439,439,439,439,439,439,439,439,439,677,435,439,439,439', '332,326,439,675,686,439,688,323,439,439,988,439,443,439,691,439,319', '439,439,439,439,439,439,439,1057,439,439,439,1006,694,1006,1006,1006', '1006,1006,683,683,683,683,683,439,439,439,439,1006,439,31,439,513,513', '513,513,513,31,31,31,695,439,31,31,31,668,31,473,662,986,1006,986,986', '986,698,986,31,31,317,700,1,1006,1006,473,473,703,31,31,312,31,31,31', '31,31,902,311,902,902,902,473,902,473,710,473,473,473,473,986,660,473', '852,473,852,852,852,1006,852,31,31,31,31,31,31,31,31,31,31,31,31,31', '31,336,482,31,31,31,651,725,31,727,31,31,734,739,31,31,308,31,852,31', '742,31,645,31,31,31,31,31,31,31,347,31,348,31,482,302,301,352,482,482', '482,482,640,354,300,438,31,31,298,31,,31,438,438,438,,,438,438,438,474', '438,933,31,933,933,933,,933,,438,438,438,438,,,474,474,,,,438,438,,438', '438,438,438,438,,,,474,,474,,474,474,474,474,933,,474,,474,,,,,,,,438', '438,438,438,438,438,438,438,438,438,438,438,438,438,,,438,438,438,,', '438,,,438,,,438,438,,438,,438,,438,,438,438,438,438,438,438,438,,438', '438,438,1004,,1004,1004,1004,1004,1004,,,,,,438,438,438,438,1004,438', '429,438,,,,,,429,429,429,,438,429,429,429,,429,475,,,1004,,,,,429,429', '429,,,,1004,1004,475,475,,429,429,,429,429,429,429,429,,,,,,475,,475', ',475,475,475,475,,,475,,475,,,,1004,,429,429,429,429,429,429,429,429', '429,429,429,429,429,429,,,429,429,429,,,429,,429,429,,,429,429,,429', ',429,,429,,429,429,429,429,429,429,429,,429,429,429,,,,,,,,,,,,,429', '429,,429,,429,974,974,974,974,974,974,,,,974,974,429,,,974,,974,974', '974,974,974,974,974,,,,,,974,974,974,974,974,974,974,,,974,,,,,446,974', '974,,974,974,974,974,974,974,974,974,974,,974,974,974,,974,974,,974', '974,974,446,446,446,446,446,446,446,446,446,446,446,,446,446,,,446,446', ',974,,,974,,,974,974,,,974,,974,446,,446,974,446,446,446,446,446,446', '446,974,446,,,,974,974,974,974,974,974,,,,974,974,,446,,446,,,974,,', '974,974,974,,,974,974,234,234,234,234,234,234,,,,234,234,,,,234,,234', '234,234,234,234,234,234,,,,,,234,234,234,234,234,234,234,,,234,,,,,661', '234,234,,234,234,234,234,234,234,234,234,234,,234,234,234,,234,234,', '234,234,234,661,661,661,661,661,661,661,661,661,661,661,,661,661,,,661', '661,,234,,,234,,,234,234,,,234,,234,661,,661,234,661,661,661,661,661', '661,661,234,661,,,,234,234,234,234,234,234,,,,234,234,,661,,,,,234,', ',234,234,234,,,234,234,811,811,811,811,811,811,,,,811,811,,,,811,,811', '811,811,811,811,811,811,,,,,,811,811,811,811,811,811,811,,,811,,,,,421', '811,811,,811,811,811,811,811,811,811,811,811,,811,811,811,,811,811,', '811,811,811,421,421,421,421,421,421,421,421,421,421,421,,421,421,,,421', '421,,811,,,811,,,811,811,,,811,,811,421,,421,811,421,421,421,421,421', '421,421,811,421,,,,811,811,811,811,811,811,,,,811,811,,421,,,,,811,', ',811,811,811,,,811,811,209,209,209,209,209,209,,,,209,209,,,,209,,209', '209,209,209,209,209,209,,,,,,209,209,209,209,209,209,209,,,209,,,,,', '209,209,,209,209,209,209,209,209,209,209,209,,209,209,209,,209,209,', '209,209,209,776,776,776,776,776,776,776,776,776,776,776,,776,776,,,776', '776,,209,,,209,,,209,209,,,209,,209,776,,776,209,776,776,776,776,776', '776,776,209,776,,,,209,209,209,209,209,209,,,,209,209,,776,,,,,209,', ',209,209,209,,,209,209,941,941,941,941,941,941,,,,941,941,,,,941,,941', '941,941,941,941,941,941,,,,,,941,941,941,941,941,941,941,,,941,,,,,', '941,941,,941,941,941,941,941,941,941,941,941,,941,941,941,,941,941,', '941,941,941,788,788,788,788,788,788,788,788,788,788,788,,788,788,,,788', '788,,941,,,941,,,941,941,,,941,,941,788,,788,941,788,788,788,788,788', '788,788,941,788,,,,941,941,941,941,941,941,,,,941,941,,788,,,,,941,', ',941,941,941,,,941,941,709,709,709,709,709,709,,,,709,709,,,,709,,709', '709,709,709,709,709,709,,,,,,709,709,709,709,709,709,709,,,709,,,,,', '709,709,,709,709,709,709,709,709,709,709,709,,709,709,709,,709,709,', '709,709,709,781,781,781,781,781,781,781,781,781,781,781,,781,781,,,781', '781,,709,,,709,,,709,709,,,709,,709,781,,781,709,781,781,781,781,781', '781,781,709,781,,,,709,709,709,709,709,709,,,,709,709,,781,,,,,709,', ',709,709,709,,,709,709,859,859,859,859,859,859,,,,859,859,,,,859,,859', '859,859,859,859,859,859,,,,,,859,859,859,859,859,859,859,,,859,,,,,', '859,859,,859,859,859,859,859,859,859,859,859,,859,859,859,,859,859,', '859,859,859,889,889,889,889,889,889,889,889,889,889,889,,889,889,,,889', '889,,859,,,859,,,859,859,,,859,,859,889,,889,859,889,889,889,889,889', '889,889,859,889,,,,859,859,859,859,859,859,,,,859,859,,889,,,,,859,', ',859,859,859,,,859,859,858,858,858,858,858,858,,,,858,858,,,,858,,858', '858,858,858,858,858,858,,,,,,858,858,858,858,858,858,858,,,858,,,,,', '858,858,,858,858,858,858,858,858,858,858,858,,858,858,858,,858,858,', '858,858,858,24,24,24,24,24,24,24,24,24,24,24,,24,24,,,24,24,,858,,,858', ',,858,858,,,858,,858,24,,24,858,24,24,24,24,24,24,24,858,24,,,,858,858', '858,858,858,858,,,,858,858,,24,,,,,858,,,858,858,858,,,858,858,998,998', '998,998,998,998,,,,998,998,,,,998,,998,998,998,998,998,998,998,,,,,', '998,998,998,998,998,998,998,,,998,,,,,,998,998,,998,998,998,998,998', '998,998,998,998,,998,998,998,,998,998,,998,998,998,697,697,697,697,697', '697,697,697,697,697,697,,697,697,,,697,697,,998,,,998,,,998,998,,,998', ',998,697,,697,998,697,697,697,697,697,697,697,998,697,,,,998,998,998', '998,998,998,,,,998,998,,697,,,,,998,,,998,998,998,,,998,998,997,997', '997,997,997,997,,,,997,997,,,,997,,997,997,997,997,997,997,997,,,,,', '997,997,997,997,997,997,997,,,997,,,,,,997,997,,997,997,997,997,997', '997,997,997,997,,997,997,997,,997,997,,997,997,997,886,886,886,886,886', '886,886,886,886,886,886,,886,886,,,886,886,,997,,,997,,,997,997,,,997', ',997,886,,886,997,886,886,886,886,886,886,886,997,886,,,,997,997,997', '997,997,997,,,,997,997,,886,,,,,997,,,997,997,997,,,997,997,994,994', '994,994,994,994,,,,994,994,,,,994,,994,994,994,994,994,994,994,,,,,', '994,994,994,994,994,994,994,,,994,,,,,,994,994,,994,994,994,994,994', '994,994,994,994,,994,994,994,,994,994,,994,994,994,783,783,783,783,783', '783,783,783,783,783,783,,783,783,,,783,783,,994,,,994,,,994,994,,,994', ',994,783,,783,994,783,783,783,783,783,783,783,994,783,,,,994,994,994', '994,994,994,,,,994,994,,783,,,,,994,,,994,994,994,,,994,994,304,304', '304,304,304,304,,,,304,304,,,,304,,304,304,304,304,304,304,304,,,,,', '304,304,304,304,304,304,304,,,304,,,,,,304,304,,304,304,304,304,304', '304,304,304,304,,304,304,304,,304,304,,304,304,304,441,441,441,441,441', '441,441,441,441,441,441,,441,441,,,441,441,,304,,,304,,,304,304,,,304', ',304,441,,441,304,441,441,441,441,441,441,441,304,441,,,,304,304,304', '304,304,304,,,,304,304,,441,,,,,304,,,304,304,304,,,304,304,911,911', '911,911,911,911,,,,911,911,,,,911,,911,911,911,911,911,911,911,,,,,', '911,911,911,911,911,911,911,,,911,,,,,,911,911,,911,911,911,911,911', '911,911,911,911,,911,911,911,,911,911,,911,911,911,786,786,786,786,786', '786,786,786,786,786,786,,786,786,,,786,786,,911,,,911,,,911,911,,,911', ',911,786,,786,911,786,786,786,786,786,786,786,911,786,,,,911,911,911', '911,911,911,,,,911,911,,786,,,,,911,,,911,911,911,,,911,911,826,826', '826,826,826,826,,,,826,826,,,,826,,826,826,826,826,826,826,826,,,,,', '826,826,826,826,826,826,826,,,826,,,,,,826,826,,826,826,826,826,826', '826,826,826,826,,826,826,826,,826,826,,826,826,826,279,279,279,279,279', '279,279,279,279,279,279,,279,279,,,279,279,,826,,,826,,,826,826,,,826', ',826,279,,279,826,279,279,279,279,279,279,279,826,279,,,,826,826,826', '826,826,826,,,,826,826,,279,,,,,826,,,826,826,826,,,826,826,815,815', '815,815,815,815,,,,815,815,,,,815,,815,815,815,815,815,815,815,,,,,', '815,815,815,815,815,815,815,,,815,,,,,,815,815,,815,815,815,815,815', '815,815,815,815,,815,815,815,,815,815,,815,815,815,485,485,485,485,485', '485,485,485,485,485,485,,485,485,,,485,485,,815,,,815,,,815,815,,,815', ',815,485,,485,815,485,485,485,485,485,485,485,815,485,,,,815,815,815', '815,815,815,,,,815,815,485,485,,,,,815,,,815,815,815,,,815,815,816,816', '816,816,816,816,,,,816,816,,,,816,,816,816,816,816,816,816,816,,,,,', '816,816,816,816,816,816,816,,,816,,,,,,816,816,,816,816,816,816,816', '816,816,816,816,,816,816,816,,816,816,,816,816,816,790,790,790,790,790', '790,790,790,790,790,790,,790,790,,,790,790,,816,,,816,,,816,816,,,816', ',816,790,,790,816,790,790,790,790,790,790,790,816,790,,,,816,816,816', '816,816,816,,,,816,816,,790,,,,,816,,,816,816,816,,,816,816,907,907', '907,907,907,907,,,,907,907,,,,907,,907,907,907,907,907,907,907,,,,,', '907,907,907,907,907,907,907,,,907,,,,,,907,907,,907,907,907,907,907', '907,907,907,907,,907,907,907,,907,907,,907,907,907,534,534,534,534,534', '534,534,534,534,534,534,,534,534,,,534,534,,907,,,907,,,907,907,,,907', ',907,534,,534,907,534,534,534,534,534,534,534,907,534,,,,907,907,907', '907,907,907,,,,907,907,,534,,,,,907,,,907,907,907,,,907,907,299,299', '299,299,299,299,,,,299,299,,,,299,,299,299,299,299,299,299,299,,,,,', '299,299,299,299,299,299,299,,,299,,,,,,299,299,,299,299,299,299,299', '299,299,299,299,,299,299,299,,299,299,,299,299,299,483,483,483,483,483', '483,483,,,483,483,,,,,,483,483,,299,,,299,,,299,299,,,299,,299,483,', '483,299,483,483,483,483,483,483,483,299,483,,,,299,299,299,299,299,299', ',,,299,299,,,,,,,299,,,299,299,299,,,299,299,989,989,989,989,989,989', ',,,989,989,,,,989,,989,989,989,989,989,989,989,,,,,,989,989,989,989', '989,989,989,,,989,,,,,,989,989,,989,989,989,989,989,989,989,989,989', ',989,989,989,,989,989,,989,989,989,460,460,460,460,460,460,460,460,460', '460,460,,460,460,,,460,460,,989,,,989,,,989,989,,,989,,989,460,,460', '989,460,460,460,460,460,460,460,989,460,,,,989,989,989,989,989,989,', ',,989,989,,,,,,,989,,,989,989,989,,,989,989,329,329,329,329,329,329', ',,,329,329,,,,329,,329,329,329,329,329,329,329,,,,,,329,329,329,329', '329,329,329,,,329,,,,,,329,329,,329,329,329,329,329,329,329,329,329', ',329,329,329,,329,329,,329,329,329,461,461,461,461,461,461,461,461,461', '461,461,,461,461,,,461,461,,329,,,329,,,329,329,,,329,,329,461,,461', '329,461,461,461,461,461,461,461,329,461,,,,329,329,329,329,329,329,', ',,329,329,,,,,,,329,,,329,329,329,,,329,329,708,708,708,708,708,708', ',,,708,708,,,,708,,708,708,708,708,708,708,708,,,,,,708,708,708,708', '708,708,708,,,708,,,,,,708,708,,708,708,708,708,708,708,708,708,708', ',708,708,708,,708,708,,708,708,708,477,477,477,477,477,477,477,,,477', '477,,,,,,477,477,,708,,,708,,,708,708,,,708,,708,477,,477,708,477,477', '477,477,477,477,477,708,477,,,,708,708,708,708,708,708,,,,708,708,,', ',,,,708,,,708,708,708,,,708,708,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2,2', '2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2,,2', '2,2,478,478,478,478,478,478,478,,,478,478,,,,,,478,478,,2,,,2,,,2,2', ',,2,,2,478,,478,2,478,478,478,478,478,478,478,2,478,,,,2,2,2,2,2,2,', ',,2,2,,,,,,,2,,,2,2,2,,,2,2,759,759,759,759,759,759,,,,759,759,,,,759', ',759,759,759,759,759,759,759,,,,,,759,759,759,759,759,759,759,,,759', ',,,,,759,759,,759,759,759,759,759,759,759,759,759,,759,759,759,,759', '759,,759,759,759,479,479,479,479,479,479,479,,,479,479,,,,,,479,479', ',759,,,759,,,759,759,,,759,,759,479,,479,759,479,479,479,479,479,479', '479,759,479,,,,759,759,759,759,759,759,,,,759,759,,,,,,,759,,,759,759', '759,,,759,759,868,868,868,868,868,868,,,,868,868,,,,868,,868,868,868', '868,868,868,868,,,,,,868,868,868,868,868,868,868,,,868,,,,,,868,868', ',868,868,868,868,868,868,868,868,868,,868,868,868,,868,868,,868,868', '868,480,480,480,480,480,480,480,,,480,480,,,,,,480,480,,868,,,868,,', '868,868,,,868,,868,480,,480,868,480,480,480,480,480,480,480,868,480', ',,,868,868,868,868,868,868,,,,868,868,,,,,,,868,,,868,868,868,,,868', '868,760,760,760,760,760,760,,,,760,760,,,,760,,760,760,760,760,760,760', '760,,,,,,760,760,760,760,760,760,760,,,760,,,,,,760,760,,760,760,760', '760,760,760,760,760,760,,760,760,760,,760,760,,760,760,760,484,484,484', '484,484,484,484,484,,484,484,,,,,,484,484,,760,,,760,,,760,760,,,760', ',760,484,,484,760,484,484,484,484,484,484,484,760,484,,,,760,760,760', '760,760,760,,,,760,760,,,,,,,760,,,760,760,760,,,760,760,766,766,766', '766,766,766,,,,766,766,,,,766,,766,766,766,766,766,766,766,,,,,,766', '766,766,766,766,766,766,,,766,,,,,,766,766,,766,766,766,766,766,766', '766,766,766,,766,766,766,,766,766,,766,766,766,471,471,471,471,471,471', '471,,,471,471,,,,,,471,471,,766,,,766,,,766,766,,,766,,766,471,,471', '766,471,471,471,471,471,471,471,766,471,,,,766,766,766,766,766,766,', ',,766,766,,,,,,,766,,,766,766,766,,,766,766,407,407,407,407,407,407', ',,,407,407,,,,407,,407,407,407,407,407,407,407,,,,,,407,407,407,407', '407,407,407,,,407,,,,,,407,407,407,407,407,407,407,407,407,407,407,407', ',407,407,407,,407,407,,407,407,407,476,476,476,476,476,476,476,,,476', '476,,,,,,476,476,,407,,,407,,,407,407,,,407,,407,476,,476,407,476,476', '476,476,476,476,476,407,476,,,,407,407,407,407,407,407,,,,407,407,,', ',,,,407,,,407,407,407,,,407,407,36,36,36,36,36,36,,,,36,36,,,,36,,36', '36,36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,36,36,,36,36,36', '36,36,36,36,36,36,,36,36,36,,36,36,,36,36,36,468,,,,,,,,,,,,,,,,468', '468,,36,,,36,,470,36,36,,,36,,36,468,,468,36,468,468,468,468,470,470', ',36,,,,,36,36,36,36,36,36,,,470,36,36,,470,470,470,470,,36,,,36,36,36', ',,36,36,583,583,583,583,583,583,,,,583,583,,,,583,,583,583,583,583,583', '583,583,,,,,,583,583,583,583,583,583,583,,,583,,,,,,583,583,,583,583', '583,583,583,583,583,583,583,,583,583,583,,583,583,,583,583,583,469,', ',,,,,,,,,,,,,,469,469,,583,,,583,,,583,583,,,583,,583,469,,469,583,469', '469,469,469,,,,583,,,,,583,583,583,583,583,583,,,,583,583,,,,,,,583', ',,583,583,583,,,583,583,586,586,586,586,586,586,,,,586,586,,,,586,,586', '586,586,586,586,586,586,,,,,,586,586,586,586,586,586,586,,,586,,,,,', '586,586,,586,586,586,586,586,586,586,586,586,,586,586,586,,586,586,', '586,586,586,,,,,,,,,,,,,,,,,,,,586,,,586,,,586,586,,,586,,586,,,,586', ',,,,,,,586,,,,,586,586,586,586,586,586,,,,586,586,,,,,,,586,,,586,586', '586,,,586,586,257,257,257,,257,,,,257,257,,,,257,,257,257,257,257,257', '257,257,,,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257,257,257', '257,257,257,257,257,,257,257,257,,257,257,,257,257,257,,,,,,,,,,,,,', ',,,,,,257,,,257,,,257,257,,,257,,,,,,257,,,,,,,,257,,,,,257,257,257', '257,257,257,,,,257,257,,,,,,,257,,,257,257,257,,,257,257,455,455,455', ',455,,,,455,455,,,,455,,455,455,455,455,455,455,455,,,,,,455,455,455', '455,455,455,455,,,455,,,,,,,455,,,455,455,455,455,455,455,455,455,455', '455,455,455,,455,455,,455,455,455,,,,,,,,,,,,,,,,,,,,455,,,455,,,455', '455,,,455,,455,,455,,455,,,,,,,,455,,,,,455,455,455,455,455,455,,,,455', '455,,,,,,,455,,455,455,455,455,,,455,455,8,8,8,8,8,,,,8,8,,,,8,,8,8', '8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8', ',8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,', '8,8,8,8,8,8,,,,8,8,,,,,,,8,,,8,8,8,,,8,8,1015,1015,1015,,1015,,,,1015', '1015,,,,1015,,1015,1015,1015,1015,1015,1015,1015,,,,,,1015,1015,1015', '1015,1015,1015,1015,,,1015,,,,,,,1015,,,1015,1015,1015,1015,1015,1015', '1015,1015,1015,1015,1015,1015,,1015,1015,,1015,1015,1015,,,,,,,,,,,', ',,,,,,,,1015,,,1015,,,1015,1015,,,1015,,1015,,1015,,1015,,,,,,,,1015', ',,,,1015,1015,1015,1015,1015,1015,,,,1015,1015,,,,,,,1015,,1015,1015', '1015,1015,,,1015,1015,23,23,23,,23,,,,23,23,,,,23,,23,23,23,23,23,23', '23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,,23,23,23,23,23,23,23,23', ',23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,,,23,,,23,23,,,23,', ',,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23,23,,,,,,,23,,,23,23,23', ',,23,23,32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32,32,32,,,,,,32,32', '32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32,32,32,', '32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,,32,,32', ',,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32,32,32,32,,,32', '32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33,33,33', '33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33,,33,33', ',33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33,,,,,,', ',33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33,33,,,33,33,34', '34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34', '34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34,,34,34', '34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,,,,,,34,,,', ',34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,,,34,34,37,37,37,', '37,,,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,', '37,,,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,', ',,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37,37', '37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,,38', ',38,38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38,38', '38,38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,,38', ',,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,,,38', ',,38,38,38,,,38,38,940,940,940,,940,,,,940,940,,,,940,,940,940,940,940', '940,940,940,,,,,,940,940,940,940,940,940,940,,,940,,,,,,,940,,,940,940', '940,940,940,940,940,940,,940,940,940,,940,940,,940,940,940,,,,,,,,,', ',,,,,,,,,,940,,,940,,,940,940,,,940,,940,,,,940,,,,,,,,940,,,,,940,940', '940,940,940,940,,,,940,940,,,,,,,940,,,940,940,940,,,940,940,915,915', '915,,915,,,,915,915,,,,915,,915,915,915,915,915,915,915,,,,,,915,915', '915,915,915,915,915,,,915,,,,,,,915,,,915,915,915,915,915,915,915,915', ',915,915,915,,915,915,,,,915,,,,,,,,,,,,,,,,,,,,915,,,915,,,915,915', ',,915,,,,,,,,,,,,,,,,,,,915,915,915,915,915,915,,,,915,915,,,,,,,915', ',,915,915,915,,,915,915,45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45', '45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45', '45,,45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45', ',,,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45', ',,45,45,46,46,46,,46,,,,46,46,,,,46,,46,46,46,46,46,46,46,,,,,,46,46', '46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46', '46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,', '46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,,,46,46,47,47', '47,,47,,,,47,47,,,,47,,47,47,47,47,47,47,47,,,,,,47,47,47,47,47,47,47', ',,47,,,,,,,47,,,47,47,47,47,47,47,47,47,,47,47,47,,47,47,,47,47,47,', ',,,,,,,,,,,,,,,,,,47,,,47,,,47,47,,,47,,,,,,47,,,,,,,,47,,,,,47,47,47', '47,47,47,,,,47,47,,,,,,,47,,,47,47,47,,,47,47,62,62,62,,62,,,,62,62', ',,,62,,62,62,62,62,62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,,62', ',,62,62,62,62,62,62,62,62,62,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,', ',,,,,,62,,,62,,,62,62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62', ',,,62,62,,,,,,,62,,62,62,62,62,,,62,62,66,66,66,,66,,,,66,66,,,,66,', '66,66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,,66,,,66,66', '66,66,66,66,66,66,,66,66,66,,66,66,,66,66,66,,,,,,,,,,,,,,,,,,,,66,', ',66,,,66,66,,,66,,,,,,66,,,,,,,,66,,,,,66,66,66,66,66,66,,,,66,66,,', ',,,,66,,,66,66,66,,,66,66,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67', '67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67', '67,,67,67,67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67', ',,,,,67,,,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67', ',,67,67,70,70,70,,70,,,,70,70,,,,70,,70,70,70,70,70,70,70,,,,,,70,70', '70,70,70,70,70,,,70,,,,,,,70,,,70,70,70,70,70,70,70,70,,70,70,70,,70', '70,,70,70,70,,,,,,,,,,,,,,,,,,,,70,,,70,,,70,70,,,70,,,,,,70,,,,,,,', '70,,,,,70,70,70,70,70,70,,,,70,70,70,,,,,70,70,,,70,70,70,,,70,70,71', '71,71,,71,,,,71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71', '71,,,71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,,,71,,', ',,,,,,,,,,,,,,,,,71,,,71,,,71,71,,,71,,71,,,,,,,,,,,,,,,,,71,71,71,71', '71,71,,,,71,71,,,,,,,71,,,71,71,71,,,71,71,903,903,903,,903,,,,903,903', ',,,903,,903,903,903,903,903,903,903,,,,,,903,903,903,903,903,903,903', ',,903,,,,,,,903,,,903,903,903,903,903,903,903,903,,903,903,903,,903', '903,,,,903,,,,,,,,,,,,,,,,,,,,903,,,903,,,903,903,,,903,,,,,,,,,,,,', ',,,,,,903,903,903,903,903,903,,,,903,903,,,,,,,903,,,903,903,903,,,903', '903,888,888,888,,888,,,,888,888,,,,888,,888,888,888,888,888,888,888', ',,,,,888,888,888,888,888,888,888,,,888,,,,,,,888,,,888,888,888,888,888', '888,888,888,,888,888,888,,888,888,,888,888,888,,,,,,,,,,,,,,,,,,,,888', ',,888,,,888,888,,,888,,,,,,888,,,,,,,,888,,,,,888,888,888,888,888,888', ',,,888,888,,,,,,,888,,,888,888,888,,,888,888,887,887,887,,887,,,,887', '887,,,,887,,887,887,887,887,887,887,887,,,,,,887,887,887,887,887,887', '887,,,887,,,,,,,887,,,887,887,887,887,887,887,887,887,887,887,887,887', ',887,887,,887,887,887,,,,,,,,,,,,,,,,,,,,887,,,887,,,887,887,,,887,', ',,887,,887,,,,,,,,887,,,,,887,887,887,887,887,887,,,,887,887,,,,,,,887', ',887,887,887,887,,,887,887,869,869,869,,869,,,,869,869,,,,869,,869,869', '869,869,869,869,869,,,,,,869,869,869,869,869,869,869,,,869,,,,,,,869', ',,869,869,869,869,869,869,869,869,,869,869,869,,869,869,,869,869,869', ',,,,,,,,,,,,,,,,,,,869,,,869,,,869,869,,,869,,,,,,869,,,,,,,,869,,,', ',869,869,869,869,869,869,,,,869,869,,,,,,,869,,,869,869,869,,,869,869', '114,114,114,114,114,,,,114,114,,,,114,,114,114,114,114,114,114,114,', ',,,,114,114,114,114,114,114,114,,,114,,,,,,114,114,114,114,114,114,114', '114,114,114,114,114,,114,114,114,,114,114,,114,114,114,,,,,,,,,,,,,', ',,,,,,114,,,114,,,114,114,,,114,,114,,,,114,,,,,,,,114,,,,,114,114,114', '114,114,114,,,,114,114,,,,,,114,114,,,114,114,114,,,114,114,119,119', '119,,119,,,,119,119,,,,119,,119,119,119,119,119,119,119,,,,,,119,119', '119,119,119,119,119,,,119,,,,,,,119,,,119,119,119,119,119,119,119,119', ',119,119,119,,119,119,,119,119,119,,,,,,,,,,,,,,,,,,,,119,,,119,,,119', '119,,,119,,,,,,119,,,,,,,,119,,,,,119,119,119,119,119,119,,,,119,119', ',,,,,,119,,,119,119,119,,,119,119,120,120,120,,120,,,,120,120,,,,120', ',120,120,120,120,120,120,120,,,,,,120,120,120,120,120,120,120,,,120', ',,,,,,120,,,120,120,120,120,120,120,120,120,,120,120,120,,120,120,,120', '120,120,,,,,,,,,,,,,,,,,,,,120,,,120,,,120,120,,,120,,,,,,120,,,,,,', ',120,,,,,120,120,120,120,120,120,,,,120,120,,,,,,,120,,,120,120,120', ',,120,120,121,121,121,,121,,,,121,121,,,,121,,121,121,121,121,121,121', '121,,,,,,121,121,121,121,121,121,121,,,121,,,,,,,121,,,121,121,121,121', '121,121,121,121,,121,121,121,,121,121,,121,121,121,,,,,,,,,,,,,,,,,', ',,121,,,121,,,121,121,,,121,,,,,,121,,,,,,,,121,,,,,121,121,121,121', '121,121,,,,121,121,,,,,,,121,,,121,121,121,,,121,121,122,122,122,,122', ',,,122,122,,,,122,,122,122,122,122,122,122,122,,,,,,122,122,122,122', '122,122,122,,,122,,,,,,,122,,,122,122,122,122,122,122,122,122,,122,122', '122,,122,122,,122,122,122,,,,,,,,,,,,,,,,,,,,122,,,122,,,122,122,,,122', ',,,,,122,,,,,,,,122,,,,,122,122,122,122,122,122,,,,122,122,,,,,,,122', ',,122,122,122,,,122,122,123,123,123,123,123,,,,123,123,,,,123,,123,123', '123,123,123,123,123,,,,,,123,123,123,123,123,123,123,,,123,,,,,,123', '123,,123,123,123,123,123,123,123,123,123,,123,123,123,,123,123,,123', '123,123,,,,,,,,,,,,,,,,,,,,123,,,123,,,123,123,,,123,,123,,,,123,,,', ',,,,123,,,,,123,123,123,123,123,123,,,,123,123,,,,,,,123,,,123,123,123', ',,123,123,210,210,210,,210,,,,210,210,,,,210,,210,210,210,210,210,210', '210,,,,,,210,210,210,210,210,210,210,,,210,,,,,,,210,,,210,210,210,210', '210,210,210,210,,210,210,210,,210,210,,210,210,210,,,,,,,,,,,,,,,,,', ',,210,,,210,,,210,210,,,210,,210,,,,210,,,,,,,,210,,,,,210,210,210,210', '210,210,,,,210,210,,,,,,,210,,,210,210,210,,,210,210,211,211,211,,211', ',,,211,211,,,,211,,211,211,211,211,211,211,211,,,,,,211,211,211,211', '211,211,211,,,211,,,,,,,211,,,211,211,211,211,211,211,211,211,,211,211', '211,,211,211,,211,211,211,,,,,,,,,,,,,,,,,,,,211,,,211,,,211,211,,,211', ',,,,,211,,,,,,,,211,,,,,211,211,211,211,211,211,,,,211,211,,,,,,,211', ',,211,211,211,,,211,211,212,212,212,,212,,,,212,212,,,,212,,212,212', '212,212,212,212,212,,,,,,212,212,212,212,212,212,212,,,212,,,,,,,212', ',,212,212,212,212,212,212,212,212,212,212,212,212,,212,212,,212,212', '212,,,,,,,,,,,,,,,,,,,,212,,,212,,,212,212,,,212,,212,,212,,212,,,,', ',,,212,,,,,212,212,212,212,212,212,,,,212,212,,,,,,,212,,212,212,212', '212,,,212,212,217,217,217,,217,,,,217,217,,,,217,,217,217,217,217,217', '217,217,,,,,,217,217,217,217,217,217,217,,,217,,,,,,,217,,,217,217,217', '217,217,217,217,217,,217,217,217,,217,217,,217,217,217,,,,,,,,,,,,,', ',,,,,,217,,,217,,,217,217,,,217,,,,,,217,,,,,,,,217,,,,,217,217,217', '217,217,217,,,,217,217,,,,,,,217,,,217,217,217,,,217,217,218,218,218', ',218,,,,218,218,,,,218,,218,218,218,218,218,218,218,,,,,,218,218,218', '218,218,218,218,,,218,,,,,,,218,,,218,218,218,218,218,218,218,218,,218', '218,218,,218,218,,218,218,218,,,,,,,,,,,,,,,,,,,,218,,,218,,,218,218', ',,218,,218,,,,218,,,,,,,,218,,,,,218,218,218,218,218,218,,,,218,218', ',,,,,,218,,,218,218,218,,,218,218,219,219,219,,219,,,,219,219,,,,219', ',219,219,219,219,219,219,219,,,,,,219,219,219,219,219,219,219,,,219', ',,,,,,219,,,219,219,219,219,219,219,219,219,,219,219,219,,219,219,,219', '219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,219,,,219,,,,,,219,,,,,,', ',219,,,,,219,219,219,219,219,219,,,,219,219,,,,,,,219,,,219,219,219', ',,219,219,220,220,220,,220,,,,220,220,,,,220,,220,220,220,220,220,220', '220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220,,,220,220,220,220', '220,220,220,220,,220,220,220,,220,220,,220,220,220,,,,,,,,,,,,,,,,,', ',,220,,,220,,,220,220,,,220,,,,,,220,,,,,,,,220,,,,,220,220,220,220', '220,220,,,,220,220,,,,,,,220,,,220,220,220,,,220,220,221,221,221,,221', ',,,221,221,,,,221,,221,221,221,221,221,221,221,,,,,,221,221,221,221', '221,221,221,,,221,,,,,,,221,,,221,221,221,221,221,221,221,221,,221,221', '221,,221,221,,221,221,221,,,,,,,,,,,,,,,,,,,,221,,,221,,,221,221,,,221', ',,,,,221,,,,,,,,221,,,,,221,221,221,221,221,221,,,,221,221,,,,,,,221', ',,221,221,221,,,221,221,222,222,222,,222,,,,222,222,,,,222,,222,222', '222,222,222,222,222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,,222', ',,222,222,222,222,222,222,222,222,,222,222,222,,222,222,,222,222,222', ',,,,,,,,,,,,,,,,,,,222,,,222,,,222,222,,,222,,,,,,222,,,,,,,,222,,,', ',222,222,222,222,222,222,,,,222,222,222,,,,,,222,,,222,222,222,,,222', '222,856,856,856,,856,,,,856,856,,,,856,,856,856,856,856,856,856,856', ',,,,,856,856,856,856,856,856,856,,,856,,,,,,,856,,,856,856,856,856,856', '856,856,856,,856,856,856,,856,856,,856,856,856,,,,,,,,,,,,,,,,,,,,856', ',,856,,,856,856,,,856,,,,,,856,,,,,,,,856,,,,,856,856,856,856,856,856', ',,,856,856,,,,,,,856,,,856,856,856,,,856,856,741,741,741,,741,,,,741', '741,,,,741,,741,741,741,741,741,741,741,,,,,,741,741,741,741,741,741', '741,,,741,,,,,,,741,,,741,741,741,741,741,741,741,741,,741,741,741,', '741,741,,741,741,741,,,,,,,,,,,,,,,,,,,,741,,,741,,,741,741,,,741,,741', ',,,741,,,,,,,,741,,,,,741,741,741,741,741,741,,,,741,741,,,,,,,741,', ',741,741,741,,,741,741,721,721,721,,721,,,,721,721,,,,721,,721,721,721', '721,721,721,721,,,,,,721,721,721,721,721,721,721,,,721,,,,,,,721,,,721', '721,721,721,721,721,721,721,,721,721,721,,721,721,,721,721,721,,,,,', ',,,,,,,,,,,,,,721,,,721,,,721,721,,,721,,,,,,721,,,,,,,,721,,,,,721', '721,721,721,721,721,,,,721,721,,,,,,,721,,,721,721,721,,,721,721,701', '701,701,,701,,,,701,701,,,,701,,701,701,701,701,701,701,701,,,,,,701', '701,701,701,701,701,701,,,701,,,,,,,701,,,701,701,701,701,701,701,701', '701,,701,701,701,,701,701,,701,701,701,,,,,,,,,,,,,,,,,,,,701,,,701', ',,701,701,,,701,,701,,,,701,,,,,,,,701,,,,,701,701,701,701,701,701,', ',,701,701,,,,,,,701,,,701,701,701,,,701,701,696,696,696,,696,,,,696', '696,,,,696,,696,696,696,696,696,696,696,,,,,,696,696,696,696,696,696', '696,,,696,,,,,,,696,,,696,696,696,696,696,696,696,696,,696,696,696,', '696,696,,,,696,,,,,,,,,,,,,,,,,,,,696,,,696,,,696,696,,,696,,,,,,,,', ',,,,,,,,,,696,696,696,696,696,696,,,,696,696,,,,,,,696,,,696,696,696', ',,696,696,320,320,320,,320,,,,320,320,,,,320,,320,320,320,320,320,320', '320,,,,,,320,320,320,320,320,320,320,,,320,,,,,,,320,,,320,320,320,320', '320,320,320,320,,320,320,320,,320,320,,,,320,,,,,,,,,,,,,,,,,,,,320', ',,320,,,320,320,,,320,,,,,,,,,,,,,,,,,,,320,320,320,320,320,320,,,,320', '320,,,,,,,320,,,320,320,320,,,320,320,685,685,685,,685,,,,685,685,,', ',685,,685,685,685,685,685,685,685,,,,,,685,685,685,685,685,685,685,', ',685,,,,,,,685,,,685,685,685,685,685,685,685,685,,685,685,685,,685,685', ',,,685,,,,,,,,,,,,,,,,,,,,685,,,685,,,685,685,,,685,,,,,,,,,,,,,,,,', ',,685,685,685,685,685,685,,,,685,685,,,,,,,685,,,685,685,685,,,685,685', '681,681,681,,681,,,,681,681,,,,681,,681,681,681,681,681,681,681,,,,', ',681,681,681,681,681,681,681,,,681,,,,,,,681,,,681,681,681,681,681,681', '681,681,,681,681,681,,681,681,,681,681,681,,,,,,,,,,,,,,,,,,,,681,,', '681,,,681,681,,,681,,,,,,681,,,,,,,,681,,,,,681,681,681,681,681,681', ',,,681,681,,,,,,,681,,,681,681,681,,,681,681,328,328,328,,328,,,,328', '328,,,,328,,328,328,328,328,328,328,328,,,,,,328,328,328,328,328,328', '328,,,328,,,,,,,328,,,328,328,328,328,328,328,328,328,,328,328,328,', '328,328,,328,328,328,,,,,,,,,,,,,,,,,,,,328,,,328,328,,328,328,,,328', ',,,,,328,,,,,,,,328,,,,,328,328,328,328,328,328,,,,328,328,,,,,,,328', ',,328,328,328,,,328,328,331,331,331,,331,,,,331,331,,,,331,,331,331', '331,331,331,331,331,,,,,,331,331,331,331,331,331,331,,,331,,,,,,,331', ',,331,331,331,331,331,331,331,331,,331,331,331,,331,331,,331,331,331', ',,,,,,,,,,,,,,,,,,,331,,,331,,,331,331,,,331,,,,,,331,,,,,,,,331,,,', ',331,331,331,331,331,331,,,,331,331,,,,,,,331,,,331,331,331,,,331,331', '678,678,678,,678,,,,678,678,,,,678,,678,678,678,678,678,678,678,,,,', ',678,678,678,678,678,678,678,,,678,,,,,,,678,,,678,678,678,678,678,678', '678,678,,678,678,678,,678,678,,678,678,678,,,,,,,,,,,,,,,,,,,,678,,', '678,,,678,678,,,678,,,,,,678,,,,,,,,678,,,,,678,678,678,678,678,678', ',,,678,678,,,,,,,678,,,678,678,678,,,678,678,654,654,654,,654,,,,654', '654,,,,654,,654,654,654,654,654,654,654,,,,,,654,654,654,654,654,654', '654,,,654,,,,,,,654,,,654,654,654,654,654,654,654,654,,654,654,654,', '654,654,,654,654,654,,,,,,,,,,,,,,,,,,,,654,,,654,,,654,654,,,654,,', ',,,654,,,,,,,,654,,,,,654,654,654,654,654,654,,,,654,654,,,,,,,654,', ',654,654,654,,,654,654,337,337,337,,337,,,,337,337,,,,337,,337,337,337', '337,337,337,337,,,,,,337,337,337,337,337,337,337,,,337,,,,,,,337,,,337', '337,337,337,337,337,337,337,337,337,337,337,,337,337,,337,337,337,,', ',,,,,,,,,,,,,,,,,337,,,337,,,337,337,,,337,,,,,,337,,,,,,,,337,,,,,337', '337,337,337,337,337,,,,337,337,,,,,,,337,,337,337,337,337,,,337,337', '653,653,653,,653,,,,653,653,,,,653,,653,653,653,653,653,653,653,,,,', ',653,653,653,653,653,653,653,,,653,,,,,,,653,,,653,653,653,653,653,653', '653,653,,653,653,653,,653,653,,653,653,653,,,,,,,,,,,,,,,,,,,,653,,', '653,,,653,653,,,653,,,,,,653,,,,,,,,653,,,,,653,653,653,653,653,653', ',,,653,653,,,,,,,653,,,653,653,653,,,653,653,650,650,650,,650,,,,650', '650,,,,650,,650,650,650,650,650,650,650,,,,,,650,650,650,650,650,650', '650,,,650,,,,,,,650,,,650,650,650,650,650,650,650,650,,650,650,650,', '650,650,,650,650,650,,,,,,,,,,,,,,,,,,,,650,,,650,,,650,650,,,650,,', ',,,650,,,,,,,,650,,,,,650,650,650,650,650,650,,,,650,650,,,,,,,650,', ',650,650,650,,,650,650,344,344,344,,344,,,,344,344,,,,344,,344,344,344', '344,344,344,344,,,,,,344,344,344,344,344,344,344,,,344,,,,,,,344,,,344', '344,344,344,344,344,344,344,,344,344,344,,344,344,,344,344,344,,,,,', ',,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,,,,,344,,,,,,,,344,,,,,344', '344,344,344,344,344,,,,344,344,,,,,,,344,,,344,344,344,,,344,344,345', '345,345,,345,,,,345,345,,,,345,,345,345,345,345,345,345,345,,,,,,345', '345,345,345,345,345,345,,,345,,,,,,,345,,,345,345,345,345,345,345,345', '345,,345,345,345,,345,345,,345,345,345,,,,,,,,,,,,,,,,,,,,345,,,345', ',,345,345,,,345,,,,,,345,,,,,,,,345,,,,,345,345,345,345,345,345,,,,345', '345,,,,,,,345,,,345,345,345,,,345,345,649,649,649,,649,,,,649,649,,', ',649,,649,649,649,649,649,649,649,,,,,,649,649,649,649,649,649,649,', ',649,,,,,,,649,,,649,649,649,649,649,649,649,649,,649,649,649,,649,649', ',649,649,649,,,,,,,,,,,,,,,,,,,,649,,,649,,,649,649,,,649,,,,,,649,', ',,,,,,649,,,,,649,649,649,649,649,649,,,,649,649,,,,,,,649,,,649,649', '649,,,649,649,644,644,644,,644,,,,644,644,,,,644,,644,644,644,644,644', '644,644,,,,,,644,644,644,644,644,644,644,,,644,,,,,,,644,,,644,644,644', '644,644,644,644,644,,644,644,644,,644,644,,644,644,644,,,,,,,,,,,,,', ',,,,,,644,,,644,,,644,644,,,644,,,,,,644,,,,,,,,644,,,,,644,644,644', '644,644,644,,,,644,644,,,,,,,644,,,644,644,644,,,644,644,643,643,643', ',643,,,,643,643,,,,643,,643,643,643,643,643,643,643,,,,,,643,643,643', '643,643,643,643,,,643,,,,,,,643,,,643,643,643,643,643,643,643,643,,643', '643,643,,643,643,,643,643,643,,,,,,,,,,,,,,,,,,,,643,,,643,,,643,643', ',,643,,,,,,643,,,,,,,,643,,,,,643,643,643,643,643,643,,,,643,643,,,', ',,,643,,,643,643,643,,,643,643,642,642,642,,642,,,,642,642,,,,642,,642', '642,642,642,642,642,642,,,,,,642,642,642,642,642,642,642,,,642,,,,,', ',642,,,642,642,642,642,642,642,642,642,642,642,642,642,,642,642,,642', '642,642,,,,,,,,,,,,,,,,,,,,642,,,642,,,642,642,,,642,,,,642,,642,,,', ',,,,642,,,,,642,642,642,642,642,642,,,,642,642,,,,,,,642,,642,642,642', '642,,,642,642,641,641,641,,641,,,,641,641,,,,641,,641,641,641,641,641', '641,641,,,,,,641,641,641,641,641,641,641,,,641,,,,,,,641,,,641,641,641', '641,641,641,641,641,641,641,641,641,,641,641,,641,641,641,,,,,,,,,,', ',,,,,,,,,641,,,641,,,641,641,,,641,,641,,641,,641,,,,,,,,641,,,,,641', '641,641,641,641,641,,,,641,641,,,,,,,641,,641,641,641,641,,,641,641', '638,638,638,,638,,,,638,638,,,,638,,638,638,638,638,638,638,638,,,,', ',638,638,638,638,638,638,638,,,638,,,,,,,638,,,638,638,638,638,638,638', '638,638,,638,638,638,,638,638,,638,638,638,,,,,,,,,,,,,,,,,,,,638,,', '638,,,638,638,,,638,,,,,,638,,,,,,,,638,,,,,638,638,638,638,638,638', ',,,638,638,,,,,,,638,,,638,638,638,,,638,638,357,357,357,,357,,,,357', '357,,,,357,,357,357,357,357,357,357,357,,,,,,357,357,357,357,357,357', '357,,,357,,,,,,,357,,,357,357,357,357,357,357,357,357,,357,357,357,', '357,357,,,,357,,,,,,,,,,,,,,,,,,,,357,,,357,,,357,357,,,357,,,,,,,,', ',,,,,,,,,,357,357,357,357,357,357,,,,357,357,,,,,,,357,,,357,357,357', ',,357,357,359,359,359,,359,,,,359,359,,,,359,,359,359,359,359,359,359', '359,,,,,,359,359,359,359,359,359,359,,,359,,,,,,,359,,,359,359,359,359', '359,359,359,359,,359,359,359,,359,359,,,,359,,,,,,,,,,,,,,,,,,,,359', ',,359,,,359,359,,,359,,,,,,,,,,,,,,,,,,,359,359,359,359,359,359,,,,359', '359,,,,,,,359,,,359,359,359,,,359,359,637,637,637,,637,,,,637,637,,', ',637,,637,637,637,637,637,637,637,,,,,,637,637,637,637,637,637,637,', ',637,,,,,,,637,,,637,637,637,637,637,637,637,637,,637,637,637,,637,637', ',637,637,637,,,,,,,,,,,,,,,,,,,,637,,,637,,,637,637,,,637,,637,,,,637', ',,,,,,,637,,,,,637,637,637,637,637,637,,,,637,637,,,,,,,637,,,637,637', '637,,,637,637,608,608,608,,608,,,,608,608,,,,608,,608,608,608,608,608', '608,608,,,,,,608,608,608,608,608,608,608,,,608,,,,,,,608,,,608,608,608', '608,608,608,608,608,,608,608,608,,608,608,,608,608,608,,,,,,,,,,,,,', ',,,,,,608,,,608,,,608,608,,,608,,,,,,608,,,,,,,,608,,,,,608,608,608', '608,608,608,,,,608,608,,,,,,,608,,,608,608,608,,,608,608,604,604,604', ',604,,,,604,604,,,,604,,604,604,604,604,604,604,604,,,,,,604,604,604', '604,604,604,604,,,604,,,,,,,604,,,604,604,604,604,604,604,604,604,,604', '604,604,,604,604,,604,604,604,,,,,,,,,,,,,,,,,,,,604,,,604,,,604,604', ',,604,,,,,,604,,,,,,,,604,,,,,604,604,604,604,604,604,,,,604,604,,,', ',,,604,,,604,604,604,,,604,604,592,592,592,,592,,,,592,592,,,,592,,592', '592,592,592,592,592,592,,,,,,592,592,592,592,592,592,592,,,592,,,,,', ',592,,,592,592,592,592,592,592,592,592,592,592,592,592,,592,592,,592', '592,592,,,,,,,,,,,,,,,,,,,,592,,,592,,,592,592,,,592,,592,,592,,592', ',,,,,,,592,,,,,592,592,592,592,592,592,,,,592,592,,,,,,,592,,592,592', '592,592,,,592,592,571,571,571,,571,,,,571,571,,,,571,,571,571,571,571', '571,571,571,,,,,,571,571,571,571,571,571,571,,,571,,,,,,,571,,,571,571', '571,571,571,571,571,571,,571,571,571,,571,571,,571,571,571,,,,,,,,,', ',,,,,,,,,,571,,,571,,,571,571,,,571,,,,,,571,,,,,,,,571,,,,,571,571', '571,571,571,571,,,,571,571,,,,,,,571,,,571,571,571,,,571,571,544,544', '544,,544,,,,544,544,,,,544,,544,544,544,544,544,544,544,,,,,,544,544', '544,544,544,544,544,,,544,,,,,,,544,,,544,544,544,544,544,544,544,544', '544,544,544,544,,544,544,,544,544,544,,,,,,,,,,,,,,,,,,,,544,,,544,', ',544,544,,,544,,,,,,544,,,,,,,,544,,,,,544,544,544,544,544,544,,,,544', '544,,,,,,,544,,544,544,544,544,,,544,544,541,541,541,,541,,,,541,541', ',,,541,,541,541,541,541,541,541,541,,,,,,541,541,541,541,541,541,541', ',,541,,,,,,,541,,,541,541,541,541,541,541,541,541,541,541,541,541,,541', '541,,541,541,541,,,,,,,,,,,,,,,,,,,,541,,,541,,,541,541,,,541,,541,', ',,541,,,,,,,,541,,,,,541,541,541,541,541,541,,,,541,541,,,,,,,541,,541', '541,541,541,,,541,541,535,535,535,,535,,,,535,535,,,,535,,535,535,535', '535,535,535,535,,,,,,535,535,535,535,535,535,535,,,535,,,,,,,535,,,535', '535,535,535,535,535,535,535,,535,535,535,,535,535,,535,535,535,,,,,', ',,,,,,,,,,,,,,535,,,535,,,535,535,,,535,,,,,,535,,,,,,,,535,,,,,535', '535,535,535,535,535,,,,535,535,,,,,,,535,,,535,535,535,,,535,535,531', '531,531,,531,,,,531,531,,,,531,,531,531,531,531,531,531,531,,,,,,531', '531,531,531,531,531,531,,,531,,,,,,,531,,,531,531,531,531,531,531,531', '531,,531,531,531,,531,531,,531,531,531,,,,,,,,,,,,,,,,,,,,531,,,531', ',,531,531,,,531,,,,,,531,,,,,,,,531,,,,,531,531,531,531,531,531,,,,531', '531,,,,,,,531,,,531,531,531,,,531,531,530,530,530,,530,,,,530,530,,', ',530,,530,530,530,530,530,530,530,,,,,,530,530,530,530,530,530,530,', ',530,,,,,,,530,,,530,530,530,530,530,530,530,530,,530,530,530,,530,530', ',530,530,530,,,,,,,,,,,,,,,,,,,,530,,,530,,,530,530,,,530,,,,,,530,', ',,,,,,530,,,,,530,530,530,530,530,530,,,,530,530,,,,,,,530,,,530,530', '530,,,530,530,527,527,527,,527,,,,527,527,,,,527,,527,527,527,527,527', '527,527,,,,,,527,527,527,527,527,527,527,,,527,,,,,,,527,,,527,527,527', '527,527,527,527,527,,527,527,527,,527,527,,,,527,,,,,,,,,,,,,,,,,,,', '527,,,527,,,527,527,,,527,,,,,,,,,,,,,,,,,,,527,527,527,527,527,527', ',,,527,527,,,,,,,527,,,527,527,527,,,527,527,521,521,521,,521,,,,521', '521,,,,521,,521,521,521,521,521,521,521,,,,,,521,521,521,521,521,521', '521,,,521,,,,,,,521,,,521,521,521,521,521,521,521,521,521,521,521,521', ',521,521,,521,521,521,,,,,,,,,,,,,,,,,,,,521,,,521,,,521,521,,,521,', '521,,521,,521,,,,,,,,521,,,,,521,521,521,521,521,521,,,,521,521,,,,', ',,521,,521,521,521,521,,,521,521,519,519,519,,519,,,,519,519,,,,519', ',519,519,519,519,519,519,519,,,,,,519,519,519,519,519,519,519,,,519', ',,,,,,519,,,519,519,519,519,519,519,519,519,,519,519,519,,519,519,,', ',519,,,,,,,,,,,,,,,,,,,,519,,,519,,,519,519,,,519,,,,,,,,,,,,,,,,,,', '519,519,519,519,519,519,,,,519,519,,,,,,,519,,,519,519,519,,,519,519', '512,512,512,512,512,,,,512,512,,,,512,,512,512,512,512,512,512,512,', ',,,,512,512,512,512,512,512,512,,,512,,,,,,512,512,,512,512,512,512', '512,512,512,512,512,,512,512,512,,512,512,,512,512,512,,,,,,,,,,,,,', ',,,,,,512,,,512,,,512,512,,,512,,512,,,,512,,,,,,,,512,,,,,512,512,512', '512,512,512,,,,512,512,,,,,,512,512,,,512,512,512,,,512,512,417,417', '417,,417,,,,417,417,,,,417,,417,417,417,417,417,417,417,,,,,,417,417', '417,417,417,417,417,,,417,,,,,,,417,,,417,417,417,417,417,417,417,417', ',417,417,417,,417,417,,417,417,417,,,,,,,,,,,,,,,,,,,,417,,,417,,,417', '417,,,417,,,,,,417,,,,,,,,417,,,,,417,417,417,417,417,417,,,,417,417', ',,,,,,417,,,417,417,417,,,417,417,509,509,509,,509,,,,509,509,,,,509', ',509,509,509,509,509,509,509,,,,,,509,509,509,509,509,509,509,,,509', ',,,,,,509,,,509,509,509,509,509,509,509,509,,509,509,509,,509,509,,509', '509,509,,,,,,,,,,,,,,,,,,,,509,,,509,,,509,509,,,509,,,,,,509,,,,,,', ',509,,,,,509,509,509,509,509,509,,,,509,509,,,,,,,509,,,509,509,509', ',,509,509,505,505,505,,505,,,,505,505,,,,505,,505,505,505,505,505,505', '505,,,,,,505,505,505,505,505,505,505,,,505,,,,,,,505,,,505,505,505,505', '505,505,505,505,,505,505,505,,505,505,,505,505,505,,,,,,,,,,,,,,,,,', ',,505,,,505,,,505,505,,,505,,,,,,505,,,,,,,,505,,,,,505,505,505,505', '505,505,,,,505,505,,,,,,,505,,,505,505,505,,,505,505,503,503,503,,503', ',,,503,503,,,,503,,503,503,503,503,503,503,503,,,,,,503,503,503,503', '503,503,503,,,503,,,,,,,503,,,503,503,503,503,503,503,503,503,503,503', '503,503,,503,503,,503,503,503,,,,,,,,,,,,,,,,,,,,503,,,503,,,503,503', ',,503,,,,503,,503,,,,,,,,503,,,,,503,503,503,503,503,503,,,,503,503', ',,,,,,503,,503,503,503,503,,,503,503,500,500,500,,500,,,,500,500,,,', '500,,500,500,500,500,500,500,500,,,,,,500,500,500,500,500,500,500,,', '500,,,,,,,500,,,500,500,500,500,500,500,500,500,500,500,500,500,,500', '500,,500,500,500,,,,,,,,,,,,,,,,,,,,500,,,500,,,500,500,,,500,,500,', '500,,500,,,,,,,,500,,,,,500,500,500,500,500,500,,,,500,500,,,,,,,500', ',500,500,500,500,,,500,500,459,459,459,,459,,,,459,459,,,,459,,459,459', '459,459,459,459,459,,,,,,459,459,459,459,459,459,459,,,459,,,,,,,459', ',,459,459,459,459,459,459,459,459,,459,459,459,,459,459,,459,459,459', ',,,,,,,,,,,,,,,,,,,459,,,459,,,459,459,,,459,,,,,,459,,,,,,,,459,,,', ',459,459,459,459,459,459,,,,459,459,,,,,,,459,,,459,459,459,,,459,459', '458,458,458,,458,,,,458,458,,,,458,,458,458,458,458,458,458,458,,,,', ',458,458,458,458,458,458,458,,,458,,,,,,,458,,,458,458,458,458,458,458', '458,458,,458,458,458,,458,458,,458,458,458,,,,,,,,,,,,,,,,,,,,458,,', '458,,,458,458,,,458,,,,,,458,,,,,,,,458,,,,,458,458,458,458,458,458', ',,,458,458,,,,,,,458,,,458,458,458,,,458,458,457,457,457,,457,,,,457', '457,,,,457,,457,457,457,457,457,457,457,,,,,,457,457,457,457,457,457', '457,,,457,,,,,,,457,,,457,457,457,457,457,457,457,457,,457,457,457,', '457,457,,457,457,457,,,,,,,,,,,,,,,,,,,,457,,,457,,,457,457,,,457,,', ',,,457,,,,,,,,457,,,,,457,457,457,457,457,457,,,,457,457,,,,,,,457,', ',457,457,457,,,457,457,808,808,808,,808,,,,808,808,,,,808,,808,808,808', '808,808,808,808,,,,,,808,808,808,808,808,808,808,,,808,,,,,,,808,,,808', '808,808,808,808,808,808,808,,808,808,808,,808,808,,,,808,,,,,,,,,,,', ',,,,,,,,808,,,808,,,808,808,,,808,,,,,,,,,,,,,,,,,,,808,808,808,808', '808,808,,,,808,808,,,,,,,808,,,808,808,808,,,808,808,233,233,233,,233', ',,,233,233,,,,233,,233,233,233,233,233,233,233,,,,,,233,233,233,233', '233,233,233,,,233,,,,,,,233,,,233,233,233,233,233,233,233,233,,233,233', '233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,,,233,233,,,233', ',,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233,233,,,,,,,233', ',,233,233,233,,,233,233,796,796,796,,796,,,,796,796,,,,796,,796,796', '796,796,796,796,796,,,,,,796,796,796,796,796,796,796,,,796,,,,,,,796', ',,796,796,796,796,796,796,796,796,,796,796,796,,796,796,,796,796,796', ',,,,,,,,,,,,,,,,,,,796,,,796,,,796,796,,,796,,,,,,796,,,,,,,,796,,,', ',796,796,796,796,796,796,,,,796,796,,,,,,,796,,,796,796,796,,,796,796', '236,236,236,,236,,,,236,236,,,,236,,236,236,236,236,236,236,236,,,,', ',236,236,236,236,236,236,236,,,236,,,,,,,236,,,236,236,236,236,236,236', '236,236,,236,236,236,,236,236,,236,236,236,,,,,,,,,,,,,,,,,,,,236,,', '236,,,236,236,,,236,,,,,,236,,,,,,,,236,,,,,236,236,236,236,236,236', ',,,236,236,,,,,,,236,,,236,236,236,,,236,236,237,237,237,,237,,,,237', '237,,,,237,,237,237,237,237,237,237,237,,,,,,237,237,237,237,237,237', '237,,,237,,,,,,,237,,,237,237,237,237,237,237,237,237,,237,237,237,', '237,237,,237,237,237,,,,,,,,,,,,,,,,,,,,237,,,237,,,237,237,,,237,,', ',,,237,,,,,,,,237,,,,,237,237,237,237,237,237,,,,237,237,,,,,,,237,', ',237,237,237,,,237,237,238,238,238,,238,,,,238,238,,,,238,,238,238,238', '238,238,238,238,,,,,,238,238,238,238,238,238,238,,,238,,,,,,,238,,,238', '238,238,238,238,238,238,238,,238,238,238,,238,238,,238,238,238,,,,,', ',,,,,,,,,,,,,,238,,,238,,,238,238,,,238,,,,,,238,,,,,,,,238,,,,,238', '238,238,238,238,238,,,,238,238,,,,,,,238,,,238,238,238,,,238,238,239', '239,239,,239,,,,239,239,,,,239,,239,239,239,239,239,239,239,,,,,,239', '239,239,239,239,239,239,,,239,,,,,,,239,,,239,239,239,239,239,239,239', '239,,239,239,239,,239,239,,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239', ',,239,239,,,239,,,,,,239,,,,,,,,239,,,,,239,239,239,239,239,239,,,,239', '239,,,,,,,239,,,239,239,239,,,239,239,240,240,240,,240,,,,240,240,,', ',240,,240,240,240,240,240,240,240,,,,,,240,240,240,240,240,240,240,', ',240,,,,,,,240,,,240,240,240,240,240,240,240,240,,240,240,240,,240,240', ',240,240,240,,,,,,,,,,,,,,,,,,,,240,,,240,,,240,240,,,240,,,,,,240,', ',,,,,,240,,,,,240,240,240,240,240,240,,,,240,240,,,,,,,240,,,240,240', '240,,,240,240,241,241,241,,241,,,,241,241,,,,241,,241,241,241,241,241', '241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241,241,241', '241,241,241,241,241,,241,241,241,,241,241,,241,241,241,,,,,,,,,,,,,', ',,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,241,,,,,241,241,241', '241,241,241,,,,241,241,,,,,,,241,,,241,241,241,,,241,241,242,242,242', ',242,,,,242,242,,,,242,,242,242,242,242,242,242,242,,,,,,242,242,242', '242,242,242,242,,,242,,,,,,,242,,,242,242,242,242,242,242,242,242,,242', '242,242,,242,242,,242,242,242,,,,,,,,,,,,,,,,,,,,242,,,242,,,242,242', ',,242,,,,,,242,,,,,,,,242,,,,,242,242,242,242,242,242,,,,242,242,,,', ',,,242,,,242,242,242,,,242,242,243,243,243,,243,,,,243,243,,,,243,,243', '243,243,243,243,243,243,,,,,,243,243,243,243,243,243,243,,,243,,,,,', ',243,,,243,243,243,243,243,243,243,243,,243,243,243,,243,243,,243,243', '243,,,,,,,,,,,,,,,,,,,,243,,,243,,,243,243,,,243,,,,,,243,,,,,,,,243', ',,,,243,243,243,243,243,243,,,,243,243,,,,,,,243,,,243,243,243,,,243', '243,244,244,244,,244,,,,244,244,,,,244,,244,244,244,244,244,244,244', ',,,,,244,244,244,244,244,244,244,,,244,,,,,,,244,,,244,244,244,244,244', '244,244,244,,244,244,244,,244,244,,244,244,244,,,,,,,,,,,,,,,,,,,,244', ',,244,,,244,244,,,244,,,,,,244,,,,,,,,244,,,,,244,244,244,244,244,244', ',,,244,244,,,,,,,244,,,244,244,244,,,244,244,245,245,245,,245,,,,245', '245,,,,245,,245,245,245,245,245,245,245,,,,,,245,245,245,245,245,245', '245,,,245,,,,,,,245,,,245,245,245,245,245,245,245,245,,245,245,245,', '245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245,,,245,,,245,245,,,245,,', ',,,245,,,,,,,,245,,,,,245,245,245,245,245,245,,,,245,245,,,,,,,245,', ',245,245,245,,,245,245,246,246,246,,246,,,,246,246,,,,246,,246,246,246', '246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246', '246,246,246,246,246,246,246,,246,246,246,,246,246,,246,246,246,,,,,', ',,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,246,,,,,246', '246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246,,,246,246,247', '247,247,,247,,,,247,247,,,,247,,247,247,247,247,247,247,247,,,,,,247', '247,247,247,247,247,247,,,247,,,,,,,247,,,247,247,247,247,247,247,247', '247,,247,247,247,,247,247,,247,247,247,,,,,,,,,,,,,,,,,,,,247,,,247', ',,247,247,,,247,,,,,,247,,,,,,,,247,,,,,247,247,247,247,247,247,,,,247', '247,,,,,,,247,,,247,247,247,,,247,247,248,248,248,,248,,,,248,248,,', ',248,,248,248,248,248,248,248,248,,,,,,248,248,248,248,248,248,248,', ',248,,,,,,,248,,,248,248,248,248,248,248,248,248,,248,248,248,,248,248', ',248,248,248,,,,,,,,,,,,,,,,,,,,248,,,248,,,248,248,,,248,,,,,,248,', ',,,,,,248,,,,,248,248,248,248,248,248,,,,248,248,,,,,,,248,,,248,248', '248,,,248,248,249,249,249,,249,,,,249,249,,,,249,,249,249,249,249,249', '249,249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249,249,249', '249,249,249,249,249,,249,249,249,,249,249,,249,249,249,,,,,,,,,,,,,', ',,,,,,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249,249,249', '249,249,249,,,,249,249,,,,,,,249,,,249,249,249,,,249,249,250,250,250', ',250,,,,250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250', '250,250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250', '250,250,,250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250', ',,250,,,,,,250,,,,,,,,250,,,,,250,250,250,250,250,250,,,,250,250,,,', ',,,250,,,250,250,250,,,250,250,251,251,251,,251,,,,251,251,,,,251,,251', '251,251,251,251,251,251,,,,,,251,251,251,251,251,251,251,,,251,,,,,', ',251,,,251,251,251,251,251,251,251,251,,251,251,251,,251,251,,251,251', '251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251,251,,,251,,,,,,251,,,,,,,,251', ',,,,251,251,251,251,251,251,,,,251,251,,,,,,,251,,,251,251,251,,,251', '251,252,252,252,,252,,,,252,252,,,,252,,252,252,252,252,252,252,252', ',,,,,252,252,252,252,252,252,252,,,252,,,,,,,252,,,252,252,252,252,252', '252,252,252,,252,252,252,,252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252', ',,252,,,252,252,,,252,,,,,,252,,,,,,,,252,,,,,252,252,252,252,252,252', ',,,252,252,,,,,,,252,,,252,252,252,,,252,252,253,253,253,,253,,,,253', '253,,,,253,,253,253,253,253,253,253,253,,,,,,253,253,253,253,253,253', '253,,,253,,,,,,,253,,,253,253,253,253,253,253,253,253,,253,253,253,', '253,253,,253,253,253,,,,,,,,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,', ',,,253,,,,,,,,253,,,,,253,253,253,253,253,253,,,,253,253,,,,,,,253,', ',253,253,253,,,253,253,254,254,254,,254,,,,254,254,,,,254,,254,254,254', '254,254,254,254,,,,,,254,254,254,254,254,254,254,,,254,,,,,,,254,,,254', '254,254,254,254,254,254,254,,254,254,254,,254,254,,254,254,254,,,,,', ',,,,,,,,,,,,,,254,,,254,,,254,254,,,254,,,,,,254,,,,,,,,254,,,,,254', '254,254,254,254,254,,,,254,254,,,,,,,254,,,254,254,254,,,254,254,255', '255,255,,255,,,,255,255,,,,255,,255,255,255,255,255,255,255,,,,,,255', '255,255,255,255,255,255,,,255,,,,,,,255,,,255,255,255,255,255,255,255', '255,,255,255,255,,255,255,,255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255', ',,255,255,,,255,,,,,,255,,,,,,,,255,,,,,255,255,255,255,255,255,,,,255', '255,,,,,,,255,,,255,255,255,,,255,255,256,256,256,,256,,,,256,256,,', ',256,,256,256,256,256,256,256,256,,,,,,256,256,256,256,256,256,256,', ',256,,,,,,,256,,,256,256,256,256,256,256,256,256,,256,256,256,,256,256', ',256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,256,,,256,,,,,,256,', ',,,,,,256,,,,,256,256,256,256,256,256,,,,256,256,,,,,,,256,,,256,256', '256,,,256,256,258,258,258,,258,,,,258,258,,,,258,,258,258,258,258,258', '258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,,,258,,,258,258,258', '258,258,258,258,258,,258,258,258,,258,258,,258,258,258,,,,,,,,,,,,,', ',,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,258,,,,,258,258,258', '258,258,258,,,,258,258,,,,,,,258,,,258,258,258,,,258,258,259,259,259', ',259,,,,259,259,,,,259,,259,259,259,259,259,259,259,,,,,,259,259,259', '259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259,259,259,259,,259', '259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259,,,259,259', ',,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259,,,,259,259,,,', ',,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260,260,,,,260,,260', '260,260,260,260,260,260,,,,,,260,260,260,260,260,260,260,,,260,,,,,', ',260,,,260,260,260,260,260,260,260,260,,260,260,260,,260,260,,260,260', '260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,,,,,260,,,,,,,,260', ',,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,,,260,260,260,,,260', '260,261,261,261,,261,,,,261,261,,,,261,,261,261,261,261,261,261,261', ',,,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261,261,261,261,261', '261,261,261,,261,261,261,,261,261,,261,261,261,,,,,,,,,,,,,,,,,,,,261', ',,261,,,261,261,,,261,,,,,,261,,,,,,,,261,,,,,261,261,261,261,261,261', ',,,261,261,,,,,,,261,,,261,261,261,,,261,261,794,794,794,,794,,,,794', '794,,,,794,,794,794,794,794,794,794,794,,,,,,794,794,794,794,794,794', '794,,,794,,,,,,,794,,,794,794,794,794,794,794,794,794,,794,794,794,', '794,794,,794,794,794,,,,,,,,,,,,,,,,,,,,794,,,794,,,794,794,,,794,,', ',,,794,,,,,,,,794,,,,,794,794,794,794,794,794,,,,794,794,,,,,,,794,', ',794,794,794,,,794,794,793,793,793,,793,,,,793,793,,,,793,,793,793,793', '793,793,793,793,,,,,,793,793,793,793,793,793,793,,,793,,,,,,,793,,,793', '793,793,793,793,793,793,793,,793,793,793,,793,793,,793,793,793,,,,,', ',,,,,,,,,,,,,,793,,,793,,,793,793,,,793,,,,,,793,,,,,,,,793,,,,,793', '793,793,793,793,793,,,,793,793,,,,,,,793,,,793,793,793,,,793,793,268', '268,268,,268,,,,268,268,,,,268,,268,268,268,268,268,268,268,,,,,,268', '268,268,268,268,268,268,,,268,,,,,,,268,,,268,268,268,268,268,268,268', '268,268,268,268,268,,268,268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268', ',,268,268,,,268,,268,,268,,268,,,,,,,,268,,,,,268,268,268,268,268,268', ',,,268,268,,,,,,,268,,268,268,268,268,,,268,268,792,792,792,,792,,,', '792,792,,,,792,,792,792,792,792,792,792,792,,,,,,792,792,792,792,792', '792,792,,,792,,,,,,,792,,,792,792,792,792,792,792,792,792,,792,792,792', ',792,792,,792,792,792,,,,,,,,,,,,,,,,,,,,792,,,792,,,792,792,,,792,', ',,,,792,,,,,,,,792,,,,,792,792,792,792,792,792,,,,792,792,,,,,,,792', ',,792,792,792,,,792,792,274,274,274,,274,,,,274,274,,,,274,,274,274', '274,274,274,274,274,,,,,,274,274,274,274,274,274,274,,,274,,,,,,,274', ',,274,274,274,274,274,274,274,274,274,274,274,274,,274,274,,274,274', '274,,,,,,,,,,,,,,,,,,,,274,,,274,,,274,274,,,274,,274,,274,,274,,,,', ',,,274,,,,,274,274,274,274,274,274,,,,274,274,,,,,,,274,,274,274,274', '274,,,274,274,277,277,277,,277,,,,277,277,,,,277,,277,277,277,277,277', '277,277,,,,,,277,277,277,277,277,277,277,,,277,,,,,,,277,,,277,277,277', '277,277,277,277,277,277,277,277,277,,277,277,,277,277,277,,,,,,,,,,', ',,,,,,,,,277,,,277,,,277,277,,,277,,277,,277,,277,,,,,,,,277,,,,,277', '277,277,277,277,277,,,,277,277,277,,,,,,277,,277,277,277,277,,,277,277', '791,791,791,,791,,,,791,791,,,,791,,791,791,791,791,791,791,791,,,,', ',791,791,791,791,791,791,791,,,791,,,,,,,791,,,791,791,791,791,791,791', '791,791,,791,791,791,,791,791,,791,791,791,,,,,,,,,,,,,,,,,,,,791,,', '791,,,791,791,,,791,,,,,,791,,,,,,,,791,,,,,791,791,791,791,791,791', ',,,791,791,,,,,,,791,,,791,791,791,,,791,791,777,777,777,,777,,,,777', '777,,,,777,,777,777,777,777,777,777,777,,,,,,777,777,777,777,777,777', '777,,,777,,,,,,,777,,,777,777,777,777,777,777,777,777,,777,777,777,', '777,777,,777,777,777,,,,,,,,,,,,,,,,,,,,777,,,777,,,777,777,,,777,,', ',,,777,,,,,,,,777,,,,,777,777,777,777,777,777,,,,777,777,,,,,,,777,', ',777,777,777,,,777,777,775,775,775,,775,,,,775,775,,,,775,,775,775,775', '775,775,775,775,,,,,,775,775,775,775,775,775,775,,,775,,,,,,,775,,,775', '775,775,775,775,775,775,775,,775,775,775,,775,775,,775,775,775,,,,,', ',,,,,,,,,,,,,,775,,,775,,,775,775,,,775,,,,,,775,,,,,,,,775,,,,,775', '775,775,775,775,775,,,,775,775,,,,,,,775,,,775,775,775,,,775,775,284', '284,284,,284,,,,284,284,,,,284,,284,284,284,284,284,284,284,,,,,,284', '284,284,284,284,284,284,,,284,,,,,,,284,,,284,284,284,284,284,284,284', '284,,284,284,284,,284,284,,284,284,284,,,,,,,,,,,,,,,,,,,,284,,,284', ',,284,284,,,284,,,,,,284,,,,,,,,284,,,,,284,284,284,284,284,284,,,,284', '284,,,,,,,284,,,284,284,284,,,284,284,286,286,286,,286,,,,286,286,,', ',286,,286,286,286,286,286,286,286,,,,,,286,286,286,286,286,286,286,', ',286,,,,,,,286,,,286,286,286,286,286,286,286,286,,286,286,286,,286,286', ',286,286,286,,,,,,,,,,,,,,,,,,,,286,,,286,,,286,286,,,286,,,,,,286,', ',,,,,,286,,,,,286,286,286,286,286,286,,,,286,286,,,,,,,286,,,286,286', '286,,,286,286,288,288,288,,288,,,,288,288,,,,288,,288,288,288,288,288', '288,288,,,,,,288,288,288,288,288,288,288,,,288,,,,,,,288,,,288,288,288', '288,288,288,288,288,,288,288,288,,288,288,,288,288,288,,,,,,,,,,,,,', ',,,,,,288,,,288,,,288,288,,,288,,,,,,288,,,,,,,,288,,,,,288,288,288', '288,288,288,,,,288,288,,,,,,,288,,,288,288,288,,,288,288,291,291,291', ',291,,,,291,291,,,,291,,291,291,291,291,291,291,291,,,,,,291,291,291', '291,291,291,291,,,291,,,,,,,291,,,291,291,291,291,291,291,291,291,,291', '291,291,,291,291,,291,291,291,,,,,,,,,,,,,,,,,,,,291,,,291,,,291,291', ',,291,,,,,,291,,,,,,,,291,,,,,291,291,291,291,291,291,,,,291,291,,,', ',,,291,,,291,291,291,,,291,291,297,297,297,297,297,,,,297,297,,,,297', ',297,297,297,297,297,297,297,,,,,,297,297,297,297,297,297,297,,,297', ',,,,,297,297,,297,297,297,297,297,297,297,297,297,,297,297,297,,297', '297,,297,297,297,,,,,,,,,,,,,,,,,,,,297,,,297,,,297,297,,,297,,297,', ',,297,,,,,,,,297,,,,,297,297,297,297,297,297,,,,297,297,,,,,,,297,,', '297,297,297,,,297,297,753,753,753,,753,,,,753,753,,,,753,,753,753,753', '753,753,753,753,,,,,,753,753,753,753,753,753,753,,,753,,,,,,,753,,,753', '753,753,753,753,753,753,753,753,753,753,753,,753,753,,753,753,753,,', ',,,,,,,,,,,,,,,,,753,,,753,,,753,753,,,753,,753,,753,,753,,,,,,,,753', ',,,,753,753,753,753,753,753,,,,753,753,,,,,,,753,,753,753,753,753,,', '753,753,747,747,747,,747,,,,747,747,,,,747,,747,747,747,747,747,747', '747,,,,,,747,747,747,747,747,747,747,,,747,,,,,,,747,,,747,747,747,747', '747,747,747,747,,747,747,747,,747,747,,747,747,747,,,,,,,,,,,,,,,,,', ',,747,,,747,,,747,747,,,747,,,,,,747,,,,,,,,747,,,,,747,747,747,747', '747,747,,,,747,747,,,,,,,747,,,747,747,747,,,747,747,303,303,303,,303', ',,,303,303,,,,303,,303,303,303,303,303,303,303,,,,,,303,303,303,303', '303,303,303,,,303,,,,,,,303,,,303,303,303,303,303,303,303,303,,303,303', '303,,303,303,,,,303,,,,,,,,,,,,,,,,,,,,303,,,303,,,303,303,,,303,,,', ',,,,,,,,,,,,,,,303,303,303,303,303,303,,,,303,303,,,,303,,,303,,,303', '303,303,,,303,303,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91', '91,91,91,91,91,91,91,,,,91,91,91,91,91,91,91,91,91,91,,,,,,91,91,91', '91,91,91,91,91,91,91,91,91,,91,,,,,,,91,91,,91,91,91,91,91,91,91,,,91', '91,,,,91,91,91,91,,,,,,,,,,,,,,91,91,,91,91,91,91,91,91,91,91,91,91', '91,,,91,,,,,,,,,,,,,,,,,,,,91,12,12,12,12,12,12,12,12,12,12,12,12,12', '12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12,12,12,12,12,,', ',,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12,12,12,12,12', '12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12,12,12,12,12', '12,12,12,,,12,12,,,,,,,,,,12,,,,,,,,,12,74,74,74,74,74,74,74,74,74,74', '74,74,74,74,74,74,74,74,74,74,74,74,74,74,,,,74,74,74,74,74,74,74,74', '74,74,,,,,,74,74,74,74,74,74,74,74,74,74,74,74,,74,,,,,,,74,74,,74,74', '74,74,74,74,74,,,74,74,,,,74,74,74,74,,,,,,74,,,,,,,,74,74,,74,74,74', '74,74,74,74,74,74,74,74,,,74,,,,,,,,,,,,,,,,,,,,74,763,763,763,763,763', '763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763', '763,763,,,,763,763,763,763,763,763,763,763,763,763,,,,,,763,763,763', '763,763,763,763,763,763,,,763,,,,,,,,,763,763,,763,763,763,763,763,763', '763,,,763,763,,,,763,763,763,763,,,,,,,,,,,,,,763,763,,763,763,763,763', '763,763,763,763,763,763,763,,,763,,,,,,,,,,,,,,,,,,,,763,634,634,634', '634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634', '634,634,634,634,,,,634,634,634,634,634,634,634,634,634,634,,,,,,634', '634,634,634,634,634,634,634,634,,,634,,,,,,,,,634,634,,634,634,634,634', '634,634,634,,,634,634,,,,634,634,634,634,,,,,,,,,,,,,,634,634,,634,634', '634,634,634,634,634,634,634,634,634,,,634,634,,,,,,,,,,634,,,,,,,,,634', '11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11', '11,,,,11,11,11,11,11,11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11', '11,,11,,,,,,,,,11,11,,11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,', ',,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11,11,11,,,11,11,,,,,,,,,', '11,,,,,,,,,11,408,408,408,408,408,408,408,408,408,408,408,408,408,408', '408,408,408,408,408,408,408,408,408,408,,,,408,408,408,408,408,408,408', '408,408,408,,,,,,408,408,408,408,408,408,408,408,408,,,408,,,,,,,,,408', '408,,408,408,408,408,408,408,408,,,408,408,,,,408,408,408,408,,,,,,', ',,,,,,,408,408,,408,408,408,408,408,408,408,408,408,408,408,,,408,408', ',,,487,,,,,,408,487,487,487,,,487,487,487,408,487,,,,,,,,,487,487,,', ',,,,,,,487,487,,487,487,487,487,487,,,,,,,,264,264,,,264,,,,,,,,,264', '264,,264,264,264,264,264,264,264,,,264,264,487,,,264,264,264,264,487', ',,,,487,487,,,,,,,264,264,,264,264,264,264,264,264,264,264,264,264,264', '487,487,264,,,,,1017,1017,,,1017,,,487,,,,,487,1017,1017,264,1017,1017', '1017,1017,1017,1017,1017,,,1017,1017,,,,1017,1017,1017,1017,,,,,,1017', ',,,,,,,1017,1017,,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017', '1017,,,1017,,,,,453,453,,,453,,,,,,,,,453,453,1017,453,453,453,453,453', '453,453,,,453,453,,,,453,453,453,453,,,,,,453,,,,,,,,453,453,,453,453', '453,453,453,453,453,453,453,453,453,,,453,,,,,1016,1016,,,1016,,,,,', ',,,1016,1016,453,1016,1016,1016,1016,1016,1016,1016,,,1016,1016,,,,1016', '1016,1016,1016,,,,,,1016,,,,,,,,1016,1016,,1016,1016,1016,1016,1016', '1016,1016,1016,1016,1016,1016,,,1016,,,,,454,454,,,454,,,,,,,,,454,454', '1016,454,454,454,454,454,454,454,,,454,454,,,,454,454,454,454,,,,,,454', ',,,,,,,454,454,,454,454,454,454,454,454,454,454,454,454,454,,1002,454', '1002,1002,1002,1002,1002,1000,,1000,1000,1000,1000,1000,,,1002,,,,,454', ',1000,,,,,,,,,,,,,,,1002,,,,,,,1000,,967,967,1002,1002,967,,,1000,1000', '1000,1000,,,967,967,,967,967,967,967,967,967,967,,,967,967,,,,967,967', '967,967,,,1002,,,967,,,,1000,,,,967,967,,967,967,967,967,967,967,967', '967,967,967,967,,,967,,,,,522,522,,,522,,,,,,,,,522,522,967,522,522', '522,522,522,522,522,,,522,522,,,,522,522,522,522,,,,,,522,,,,,,,,522', '522,,522,522,522,522,522,522,522,522,522,522,522,,,522,,,,,523,523,', ',523,,,,,,,,,523,523,522,523,523,523,523,523,523,523,,,523,523,,,,523', '523,523,523,,,,,,523,,,,,,,,523,523,,523,523,523,523,523,523,523,523', '523,523,523,,950,523,950,950,950,950,950,,,,,,,,,,950,,,,,523,,,,,,', ',,,,,,,,,,950,950,532,532,,,532,,,950,950,950,950,,,532,532,,532,532', '532,532,532,532,532,,,532,532,,,,532,532,532,532,,,,,,532,,,,950,,,', '532,532,,532,532,532,532,532,532,532,532,532,532,532,,,532,,,,,533,533', ',,533,,,,,,,,,533,533,532,533,533,533,533,533,533,533,,,533,533,,,,533', '533,533,533,,,,,,533,,,,,,,,533,533,,533,533,533,533,533,533,533,533', '533,533,533,,927,533,927,927,927,927,927,925,,925,925,925,925,925,,', '927,,,,,533,,925,923,,923,923,923,923,923,921,,921,921,921,921,921,927', ',923,,,,,925,,921,,927,927,,,,,,925,925,,,,551,923,551,551,551,551,551', ',921,,,,923,923,,,551,921,921,921,921,898,927,898,898,898,898,898,896', '925,896,896,896,896,896,,,898,551,,,,,,896,,923,551,551,551,551,,893', '921,893,893,893,893,893,898,,,,,,,896,,893,,898,898,,,,896,896,896,896', ',,,,551,,,,,,,893,,,,,,,,,893,893,893,893,,898,,213,213,,,213,896,,', ',,,,,213,213,,213,213,213,213,213,213,213,,,213,213,,,893,213,213,213', '213,,,,,,213,,,,,,,,213,213,,213,213,213,213,213,213,213,213,213,213', '213,,,213,,,,,214,214,,,214,,,,,,,,,214,214,213,214,214,214,214,214', '214,214,,,214,214,,,,214,214,214,214,,,,,,214,,,,,,,,214,214,,214,214', '214,214,214,214,214,214,214,214,214,,,214,,,,,593,593,,,593,,,,,,,,', '593,593,214,593,593,593,593,593,593,593,,,593,593,,,,593,593,593,593', ',,,,,593,,,,,,,,593,593,,593,593,593,593,593,593,593,593,593,593,593', ',,593,,,,,594,594,,,594,,,,,,,,,594,594,593,594,594,594,594,594,594', '594,,,594,594,,,,594,594,594,594,,,,,,594,,,,,,,,594,594,,594,594,594', '594,594,594,594,594,594,594,594,,606,594,606,606,606,606,606,761,,761', '761,761,761,761,,,606,,,,,594,,761,,,,,719,,719,719,719,719,719,,,,606', '606,,,,,719,761,,606,606,606,606,,,,761,761,761,761,,,,,,,,,719,,,,', ',,,,752,752,719,719,752,,,,606,,,,,752,752,761,752,752,752,752,752,752', '752,,,752,752,,,,752,752,752,752,,,719,,,752,,,,,,,,752,752,,752,752', '752,752,752,752,752,752,752,752,752,,,752,,,,,751,751,,,751,,,,,,,,', '751,751,752,751,751,751,751,751,751,751,,,751,751,,,,751,751,751,751', ',,,,,751,,,,,,,,751,751,,751,751,751,751,751,751,751,751,751,751,751', ',340,751,340,340,340,340,340,717,,717,717,717,717,717,,,340,,,,,751', ',717,715,,715,715,715,715,715,,,,,,,,340,340,715,,,,,717,,340,340,340', '340,,,,717,717,717,717,,,,665,715,665,665,665,665,665,,,,715,715,715', '715,,,665,,,,,,340,,,,,,,717,,,,,,,,,665,,,,,,,,715,665,665,665,665', ',,,,,,,,,,,,,,,,,,,,,,,,665,,,,,,,,665' ] racc_action_check = arr = ::Array.new(26642, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_action_pointer = [ nil, 1215, 4534, 1119, nil, 644, nil, nil, 6082, 878, nil, 24807, 24275, 996, nil, 959, 976, 630, 395, 876, 685, nil, -78, 6362, 2560, 952, nil, 295, nil, 196, 928, 1185, 6502, 6642, 6782, nil, 5380, 6922, 7062, nil, 848, 258, 295, 830, 184, 7482, 7622, 7762, 725, 472, nil, nil, nil, nil, nil, nil, nil, nil, nil, 796, nil, -76, 7902, nil, -19, nil, 8042, 8182, nil, nil, 8322, 8462, 757, nil, 24408, nil, nil, nil, nil, nil, -95, nil, nil, nil, nil, nil, nil, 681, 663, 658, 638, 24142, nil, nil, nil, nil, nil, nil, 125, nil, nil, 263, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 9162, nil, nil, nil, nil, 9302, 9442, 9582, 9722, 9862, 648, nil, 634, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 629, nil, 1996, 10002, 10142, 10282, 25975, 26043, nil, nil, 10422, 10562, 10702, 10842, 10982, 11122, nil, nil, 409, 174, 103, 466, -30, 373, 412, nil, 17982, 1714, 211, 18262, 18402, 18542, 18682, 18822, 18962, 19102, 19242, 19382, 19522, 19662, 19802, 19942, 20082, 20222, 20362, 20502, 20642, 20782, 20922, 21062, 5802, 21202, 21342, 21482, 21622, nil, nil, 25059, nil, nil, 200, 22042, nil, 158, nil, nil, nil, 22322, nil, nil, 22462, nil, 3406, nil, 60, -14, nil, 23022, 12, 23162, nil, 23302, nil, -104, 23442, nil, nil, 412, nil, 891, 23582, 1169, 3970, 1183, 1210, 1171, 24002, 3124, 611, 597, 567, 1226, 768, nil, 1140, 1097, -24, nil, nil, nil, 1123, -44, 1026, 11962, nil, -85, 1079, 735, nil, 1073, nil, 12382, 4252, nil, 12522, 1048, nil, 290, 324, 1171, 12942, nil, nil, 26446, 396, 136, 157, 13362, 13502, 497, 1279, 1166, -19, 34, 536, 1247, 164, 1284, nil, nil, 14482, nil, 14622, 624, -54, 595, 605, 666, 626, 603, 326, 628, nil, 181, nil, nil, nil, nil, nil, 696, nil, 595, nil, 535, nil, 693, 465, nil, 738, 460, nil, 766, -28, nil, 771, -33, nil, 299, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 5239, 24940, nil, nil, nil, nil, 867, nil, nil, 895, 16722, 897, nil, nil, 1855, 902, nil, nil, 913, 927, 506, 504, 1442, nil, nil, nil, 533, 0, 1045, nil, nil, 1310, 1053, nil, 3124, nil, 1007, nil, nil, 1573, nil, nil, nil, nil, 237, nil, 25195, 25331, 5942, 177, 17702, 17562, 17422, 4111, 4252, 332, 493, 1051, 1005, 997, 991, 5380, 5521, 5404, 5098, 1001, 1135, 1258, 1392, 5239, 4393, 4534, 4675, 4816, 971, 1200, 3970, 4957, 3547, 210, 25059, nil, nil, nil, nil, nil, nil, 252, 274, 926, 917, nil, nil, 17282, nil, nil, 17142, nil, 17002, nil, 256, nil, 16862, nil, nil, 16582, 1148, 891, 885, nil, nil, 855, 16442, 840, 16302, 25508, 25576, 483, 866, nil, 16162, 769, nil, 16022, 15882, 25678, 25746, 3829, 15742, 875, 868, 526, nil, nil, 15602, nil, nil, 15462, nil, 747, nil, 389, 769, 58, 25869, nil, 721, 716, nil, 712, 701, 699, nil, nil, nil, nil, nil, nil, nil, nil, 677, 892, nil, nil, 15322, nil, nil, nil, 764, nil, nil, nil, 756, nil, nil, 723, 5521, 738, nil, 5662, 55, 181, 731, 694, nil, 15182, 26111, 26179, -5, nil, 340, 232, -21, nil, 749, nil, 9, 15042, nil, 26241, nil, 14902, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 333, nil, nil, 437, nil, nil, nil, 107, nil, nil, 105, nil, 114, nil, 24674, nil, 42, 14762, 14342, 372, 1212, 14202, 14062, 13922, 13782, 1190, nil, nil, nil, 13642, 13222, 1174, nil, 13082, 12802, nil, 136, 138, 401, 658, 1117, 1714, 1075, nil, nil, 26507, nil, nil, 1173, -14, -49, nil, nil, nil, nil, 1013, nil, 1046, 12662, nil, nil, 12242, nil, 1135, -109, 12102, 1014, nil, 1019, 29, 30, 1063, 152, 705, 1078, 1066, 11822, 2701, 1142, 258, 1200, 11682, nil, 1094, 226, nil, nil, nil, 4393, 2278, 1111, 356, nil, nil, 619, 26470, nil, 26453, nil, 26269, nil, 11542, nil, 932, nil, 1143, 407, 1148, nil, nil, nil, nil, 48, nil, 1263, nil, nil, nil, nil, 1269, nil, 11402, 1159, 163, 31, 194, -1, 23862, nil, 569, nil, 26384, 26316, 23722, nil, nil, nil, -93, 632, 4675, 4957, 26248, 269, 24541, 203, 904, 5098, nil, nil, nil, nil, nil, nil, nil, -27, 22882, 1996, 22742, nil, 88, nil, 2278, nil, 2983, nil, nil, 3265, nil, 2137, nil, 3688, 22602, 22182, 21902, 21762, 154, 18122, 182, 184, nil, 199, 274, 276, nil, 356, 341, 360, 349, 17842, nil, nil, 1855, nil, nil, nil, 3547, 3688, nil, nil, nil, 408, 28, nil, nil, 540, nil, 3406, 422, 466, nil, nil, nil, nil, 452, 570, 473, 490, nil, nil, nil, 493, 496, nil, 502, 520, nil, 522, nil, nil, 527, 993, 549, 1194, nil, 730, nil, 11262, 739, 2560, 2419, nil, 16, 21, 189, 441, 500, nil, 651, 4816, 9022, nil, -80, 785, 788, 672, nil, nil, nil, nil, nil, nil, nil, nil, 687, 677, nil, 2842, 8882, 8742, 2419, 455, nil, nil, 25921, nil, nil, 25897, nil, 25890, nil, nil, 722, 1178, 8602, 629, 787, 835, 3829, 734, 840, nil, 3265, nil, nil, 51, 7342, nil, nil, nil, nil, nil, 25839, nil, 25832, nil, 25815, nil, 25808, nil, nil, nil, nil, 394, 1276, 754, nil, 53, nil, 877, 879, 7202, 2137, nil, nil, 887, 183, nil, nil, nil, nil, 25638, nil, 777, nil, nil, 779, 809, 821, 822, nil, 823, nil, 227, nil, nil, nil, 486, 25440, nil, nil, 860, nil, nil, nil, 1573, 54, 80, 303, 927, 118, nil, 859, 862, 863, 865, 880, 1153, 886, 1060, 4111, nil, nil, nil, 33, 2983, nil, nil, 2842, 2701, nil, 25400, nil, 25393, nil, 1373, nil, 1116, nil, nil, nil, 801, 955, 959, nil, 1044, 6222, 25263, 25127, 134, 859, nil, nil, nil, nil, 921, 944, 372, nil, nil, nil, 1074, 1077, 1078, 959, 968, 969, 970, nil, nil, 975, -9, 52, 124, -8, 980, 987, nil, nil, nil, nil, 725, nil, nil, nil, nil, 44, nil, 1034, nil ] racc_action_default = [ -1, -628, -627, -628, -2, -614, -4, -5, -628, -8, -9, -628, -628, -628, -29, -628, -628, -628, -280, -628, -40, -43, -616, -628, -48, -50, -51, -52, -57, -257, -257, -257, -294, -333, -334, -69, -627, -73, -81, -83, -628, -516, -517, -628, -628, -628, -628, -628, -616, -238, -271, -272, -273, -274, -275, -276, -277, -278, -279, -602, -282, -285, -627, -292, -302, -405, -628, -628, -307, -310, -614, -628, -318, -325, -628, -335, -336, -447, -448, -449, -450, -451, -452, -627, -455, -627, -627, -627, -627, -627, -627, -627, -492, -498, -500, -501, -502, -503, -600, -505, -506, -601, -508, -509, -510, -511, -512, -513, -514, -515, -520, -521, 1059, -3, -615, -623, -624, -625, -7, -628, -628, -628, -628, -628, -628, -17, -628, -112, -113, -114, -115, -116, -117, -118, -119, -120, -124, -125, -126, -127, -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, -189, -190, -191, -192, -193, -194, -22, -121, -627, -628, -628, -627, -628, -628, -612, -613, -628, -628, -628, -628, -628, -616, -617, -47, -628, -516, -517, -628, -280, -628, -628, -230, -628, -627, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -411, -414, -628, -610, -611, -58, -628, -301, -628, -428, -431, -64, -627, -425, -65, -616, -66, -239, -252, -627, -627, -256, -628, -262, -628, -627, -492, -593, -616, -628, -67, -68, -614, -13, -14, -628, -71, -627, -616, -628, -74, -77, -627, -89, -90, -628, -628, -97, -294, -297, -616, -418, -333, -334, -337, -426, -628, -79, -628, -85, -290, -499, -628, -215, -216, -231, -628, -627, -284, -628, -628, -240, -620, -620, -628, -627, -303, -304, -548, -49, -628, -628, -628, -628, -614, -628, -615, -516, -517, -628, -628, -280, -628, -358, -359, -628, -321, -628, -112, -113, -154, -155, -156, -172, -177, -184, -187, -328, -628, -516, -517, -588, -589, -453, -628, -476, -628, -478, -628, -480, -628, -628, -460, -628, -628, -466, -628, -628, -472, -628, -628, -474, -628, -491, -493, -494, -495, -496, -6, -626, -23, -24, -25, -26, -27, -627, -628, -19, -20, -21, -122, -628, -30, -39, -267, -628, -628, -266, -31, -197, -616, -247, -248, -627, -627, -603, -604, -257, -423, -605, -606, -604, -603, -257, -422, -424, -605, -606, -37, -205, -38, -628, -41, -42, -195, -262, -44, -45, -46, -616, -300, -628, -628, -627, -290, -628, -628, -628, -206, -207, -208, -209, -210, -211, -212, -213, -217, -218, -219, -220, -221, -222, -223, -224, -225, -226, -227, -228, -229, -232, -233, -234, -235, -616, -627, -257, -603, -604, -54, -59, -258, -419, -627, -627, -616, -616, -296, -253, -628, -261, -254, -628, -259, -628, -263, -628, -598, -628, -599, -12, -615, -16, -616, -70, -288, -86, -75, -628, -616, -627, -628, -628, -96, -628, -499, -628, -82, -87, -628, -628, -628, -628, -236, -628, -439, -628, -286, -618, -241, -622, -621, -243, -622, -291, -628, -591, -620, -628, -628, -548, -408, -587, -587, -531, -533, -533, -533, -547, -549, -550, -551, -552, -553, -554, -555, -556, -628, -558, -560, -562, -567, -569, -570, -572, -577, -579, -580, -582, -583, -584, -628, -627, -349, -350, -627, -628, -628, -628, -628, -434, -627, -628, -628, -290, -315, -107, -108, -628, -110, -628, -280, -628, -628, -326, -548, -330, -628, -454, -477, -482, -483, -485, -456, -479, -457, -481, -458, -459, -628, -462, -464, -628, -465, -468, -469, -628, -470, -471, -628, -497, -628, -18, -628, -28, -270, -628, -628, -427, -628, -249, -251, -628, -628, -60, -245, -246, -420, -628, -628, -62, -421, -628, -628, -299, -603, -604, -603, -604, -616, -195, -628, -394, -395, -616, -397, -412, -53, -415, -627, -429, -432, -244, -295, -627, -260, -264, -628, -594, -595, -628, -596, -15, -72, -628, -78, -84, -616, -603, -604, -627, -607, -95, -628, -80, -628, -204, -214, -616, -627, -627, -283, -616, -620, -293, -592, -406, -627, -627, -616, -628, -529, -530, -628, -628, -540, -628, -543, -628, -545, -628, -360, -628, -362, -364, -371, -616, -561, -571, -581, -585, -627, -351, -627, -308, -352, -353, -311, -628, -314, -628, -616, -603, -604, -607, -289, -628, -107, -108, -109, -628, -628, -627, -319, -522, -523, -628, -322, -627, -627, -548, -628, -628, -616, -628, -627, -461, -463, -467, -473, -475, -10, -123, -268, -628, -198, -628, -619, -627, -33, -200, -34, -201, -61, -35, -203, -36, -202, -63, -196, -628, -628, -628, -628, -427, -628, -587, -587, -376, -627, -627, -627, -393, -628, -616, -399, -556, -564, -565, -575, -627, -417, -416, -55, -627, -627, -255, -265, -597, -76, -427, -88, -298, -627, -356, -627, -440, -627, -441, -442, -287, -242, -628, -628, -616, -587, -568, -586, -532, -533, -533, -559, -533, -533, -578, -533, -556, -573, -616, -628, -369, -628, -557, -628, -354, -628, -628, -627, -627, -313, -628, -427, -628, -107, -108, -111, -616, -627, -628, -525, -628, -628, -628, -616, -527, -331, -590, -484, -487, -488, -489, -490, -628, -269, -32, -199, -250, -628, -237, -628, -374, -375, -384, -378, -386, -628, -389, -628, -391, -396, -628, -628, -628, -563, -628, -628, -627, -628, -628, -11, -627, -446, -357, -628, -628, -444, -409, -410, -407, -528, -628, -536, -628, -538, -628, -541, -628, -544, -546, -361, -363, -367, -628, -372, -305, -628, -306, -628, -628, -628, -627, -316, -427, -628, -628, -323, -327, -329, -526, -548, -486, -587, -566, -377, -627, -627, -627, -627, -576, -627, -398, -616, -401, -403, -404, -574, -628, -290, -413, -628, -430, -433, -445, -627, -516, -517, -628, -628, -280, -443, -533, -533, -533, -533, -365, -628, -370, -628, -627, -309, -312, -264, -627, -627, -320, -524, -627, -627, -373, -628, -381, -628, -383, -628, -387, -628, -390, -392, -400, -628, -289, -607, -56, -439, -627, -628, -628, -290, -628, -534, -537, -539, -542, -628, -368, -627, -435, -436, -437, -628, -628, -628, -627, -627, -627, -627, -402, -438, -616, -603, -604, -607, -289, -533, -366, -355, -317, -324, -332, -628, -379, -382, -385, -388, -427, -535, -627, -380 ] clist = [ '6,422,338,221,700,590,280,280,280,263,583,586,445,133,133,567,130,130', '369,302,275,528,330,316,316,4,213,502,224,328,559,281,281,281,419,396', '117,491,323,341,341,760,442,341,552,264,429,435,537,135,135,125,208', '376,801,676,854,316,676,319,333,334,842,496,540,543,16,113,679,342,343', '824,16,346,965,639,931,114,934,130,845,377,963,379,381,384,387,390,393', '379,727,298,341,341,341,341,130,487,722,300,16,117,750,994,959,857,282', '282,282,679,357,667,29,735,738,267,273,276,29,671,672,118,402,403,404', '405,868,620,804,615,623,617,347,29,621,378,335,621,603,604,605,394,29', '29,29,615,29,871,802,997,359,759,712,713,606,278,292,293,763,987,950', '336,803,634,907,805,670,962,550,707,340,502,408,835,415,486,29,29,16', '811,29,494,965,452,815,495,280,16,816,1027,1037,741,448,449,450,451', '676,676,841,828,843,914,375,430,380,383,1,679,959,418,423,386,1025,389', '931,414,420,418,392,439,686,878,440,444,29,765,567,400,695,29,29,29', '29,29,453,766,395,9,498,869,842,559,280,9,660,849,356,739,280,207,1045', '280,840,722,866,710,851,507,910,124,493,515,837,953,608,339,2,281,901', '546,354,509,423,16,842,754,281,373,706,501,501,567,955,669,845,377,429', '435,370,316,329,331,703,525,337,814,559,344,16,858,345,859,529,747,538', ',316,275,,,688,,526,795,,,522,341,341,29,29,29,29,,518,117,,29,29,29', '29,29,29,532,,547,,,,,807,821,282,316,29,316,,587,588,9,1046,282,,842', '298,691,511,,406,298,593,16,514,16,1028,691,512,520,16,,,768,,,768,', '956,117,29,957,722,742,722,,29,998,820,29,607,942,567,492,567,16,301', '862,891,892,,,497,,808,640,981,6,,29,589,29,133,548,655,130,29,784,', ',,647,817,789,,501,501,652,691,646,,280,632,,,,832,920,567,,,29,,29', '676,430,,,135,445,633,,,559,679,423,29,29,,673,674,439,,,985,722,,874', '662,,,,,16,,,,684,,647,872,873,,687,1038,1033,663,646,,,,,,,663,663', ',280,,,,,,529,,,,316,,,699,529,,,430,316,,645,722,29,722,423,943,651', '430,,817,829,,,439,941,,,513,,,,,,439,,,,867,,,,,,,,,999,,,722,,716', '718,720,,,,,,,29,280,413,807,,,807,,668,675,,16,758,,,,764,974,430,', '691,,944,,,423,,301,,,,567,,,439,,,,,989,,,813,,,,,,,,704,,,736,736', ',,29,,,567,,808,,,808,29,,808,755,808,133,,,130,559,640,9,,,29,806,16', '780,782,16,1029,812,,785,787,,301,444,,823,,301,,831,,,529,663,640,', '316,135,501,773,807,,,822,,,647,316,,652,,,,853,646,,806,1055,29,,,29', ',825,830,418,,29,,,,,876,,,,,,,29,779,1031,1032,29,,341,,,640,,877,', '280,,,825,,825,,,,,808,,808,861,808,430,808,,,,683,,,863,423,,29,29', ',439,,,29,29,,,29,,,,,130,,,,16,16,,,,501,,,,,885,19,,,806,808,870,19', ',,,875,316,,919,,894,894,894,,,,1039,,,,,,930,,,,,,,19,29,29,,,912,16', '16,,916,,,341,16,,,,,949,,,,,922,924,341,926,928,,929,,640,691,,,355', ',,,,29,,936,,798,,29,,,,,,29,29,,945,,,16,29,,,16,16,,,,,,,29,,316,16', ',,,736,19,,800,,,,316,946,,19,,,836,,,,,,,,,,,,,,29,16,16,,29,29,,,17', ',,16,,,17,29,,,,,732,,1009,734,,,,,844,225,846,,894,894,894,894,,894', '225,225,225,,17,307,307,29,,29,29,,16,439,,,16,996,,29,29,,1020,1021', '1022,1023,,1016,,,280,19,825,,225,225,,,225,351,443,,41,,,,16,430,41', ',,,,,423,,19,,29,,,640,29,439,,825,,,,,,,894,894,894,894,41,305,305', '16,,,17,,,1056,,225,225,225,225,17,29,799,16,,894,,,16,,,16,16,,,,833', '834,,,349,,,371,,,,,19,,19,,,,29,19,952,,,798,,,798,,798,,,,838,29,', '838,,,29,,,29,29,,19,,,41,,,,,,,,,41,,883,29,,,958,,960,,,,,,17,225', '225,225,,,,,225,225,225,225,225,225,,,,982,,983,,984,,,,17,,,,895,897', '899,,906,,,,908,909,,,,,,,,,,913,,,,19,,,,,,,225,798,,798,,798,225,798', ',225,,42,,41,,,,42,,,,938,939,,,,,,,17,,17,,,,307,17,1034,41,1035,,1036', ',,,42,306,306,,,,798,307,,,,1044,,,,,17,,225,,,,,,,970,,,,973,,225,225', ',,350,,838,372,,799,,1057,799,601,799,601,,,,,,,19,,,41,,41,993,,,305', '41,,,,18,,,,,,18,,,,,42,305,1001,1003,1005,1007,,1008,,42,41,416,,,1014', ',17,,,447,,,,18,309,309,,,,1026,,,,,1030,,,,371,,371,,,,,,19,,,19,,', ',,,,,,353,,,,,,225,,,,,799,,799,,799,,799,,,,,1051,1052,1053,1054,,504', ',506,41,508,,,510,,,42,,,,,,18,,,1058,,,,,,18,,,,,,443,,,799,42,17,', ',,,,,307,,225,,,,,,307,,549,,,,,,225,,,,,,,,,,,,,,,,,,,,,,,,,,,19,19', ',,,,,,,,,,42,,42,,,,306,42,,17,41,,17,18,,,,305,225,,,,,306,,305,,,', ',225,,42,,225,636,,,18,19,19,,,,,,19,,,,,,,,,,,,,,372,,372,,,,,,,225', '225,,,,,225,225,,,225,,41,,,41,,,,,,,19,,,,19,19,,,,,18,,18,,,19,309', '18,,42,307,,,,,,,677,,,549,307,680,309,,,682,,,,,,18,17,17,,,19,19,', ',,,,,,,19,,,,,,,,,,,677,,602,549,602,,,,,,,,,,225,,,,,,225,,,,305,,17', '17,19,,728,,19,17,,305,980,,,,,,,,225,,,41,41,,,,18,,,,42,,,,,,19,306', ',,,,,,,306,,,,904,,,17,,,,17,17,,,,,,,,,,17,,19,774,,41,41,677,549,', ',,41,,,,,19,,,,,19,,,19,19,,,,225,,17,17,42,,,42,,,,,17,225,818,,,819', ',,,,,,371,,,41,,,,41,41,,18,,,827,,,,309,41,,,,,966,,309,,17,,,,17,', '848,,977,,,,,,,,,,,,,,,41,41,,447,,,,,,,41,17,,,,,,,,,,,,,,,,,,,,18', '306,,18,,,884,,,,,,306,17,371,,,,41,,,,41,,42,42,975,,17,,,,,17,,,17', '17,,,,,,,,,,,,,,,41,,225,,,,,,,,,,,,,,,,,,,,,42,42,,,,,,42,,,41,,,,', ',,,,,,,,,,41,,309,,,41,,,41,41,,,,309,,,,,549,,,,,,372,18,18,42,,,,42', '42,,,,,,,,,,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,992,,,42,42,18,18,,,,,882', '18,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,372,,,,42,,602,,42,18,232,,976', '18,18,,,,,279,279,279,,,18,,,,,,,,325,326,327,,,,42,,,,,,,,,,,279,,', ',,,,18,18,,,,,,,,,18,,,,,42,,,,,,,,,,,,,,,42,,,,,42,,,42,42,,,,,,602', ',,,18,,,,18,,,,979,,,,,,,,,,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,18,,,,,,,,,,,,,,,18,,,,,18,,,18,18,279,421,279,,,,,441,446', ',,,,,,,,,,,,,,232,,,460,461,462,463,464,465,466,467,468,469,470,471', '472,473,474,475,476,477,478,479,480,481,482,483,484,485,,,,,,,279,,', ',,,279,,,279,,,,,,,279,,279,,279,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,534,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,279,,441,661,421,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279', ',,279,,279,,,,279,,,,,,,,,,,,279,,,,,,,,,697,698,,,,,,,,,,279,,,279', ',,,,,,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279,776,,,279,279,781,783,,,,,786,788', ',,661,790,,,,,,,,,,,,,,,,,,,,,,,,279,,,279,,,,,,,,,,,,,,,,,,,,279,,', ',,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,279,,,,,,,,,', ',,,,,,,,,,,,279,,886,,,,,,,,,,,,,,781,783,788,786,,889,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,279,886,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,279' ] racc_goto_table = arr = ::Array.new(3110, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '6,25,89,34,13,95,36,36,36,155,92,92,20,64,64,189,61,61,60,53,74,55,51', '68,68,2,27,76,22,34,185,71,71,71,30,60,98,42,67,32,32,99,30,32,154,39', '40,40,10,65,65,17,17,171,144,77,93,68,77,54,6,71,190,25,72,72,23,5,200', '19,19,14,23,19,150,26,132,8,135,61,195,6,149,6,6,6,6,6,6,6,134,49,32', '32,32,32,61,40,133,50,23,98,58,110,196,14,73,73,73,200,111,43,44,94', '94,41,41,41,44,43,43,7,19,19,19,19,112,175,147,176,175,176,5,44,176', '172,73,176,59,113,59,172,44,44,44,176,44,114,145,115,116,117,139,139', '118,48,48,48,119,135,120,70,136,66,46,142,45,148,151,152,153,76,33,147', '31,156,44,44,23,157,44,160,150,51,161,162,36,23,163,164,149,165,32,32', '32,32,77,77,145,166,145,167,170,74,173,174,1,200,196,71,6,177,135,178', '132,22,22,71,179,61,55,180,22,22,44,181,189,7,55,44,44,44,44,44,27,182', '183,9,51,184,190,185,36,9,25,134,21,95,36,18,135,36,188,133,58,154,133', '171,15,11,74,51,192,193,199,91,3,71,147,88,96,34,6,23,190,97,71,87,72', '6,6,189,144,75,195,6,40,40,100,68,101,102,103,34,104,43,185,105,23,106', '107,108,53,109,32,,68,74,,,25,,67,26,,,27,32,32,44,44,44,44,,54,98,', '44,44,44,44,44,44,27,,6,,,,,189,26,73,68,44,68,,19,19,9,93,73,,190,49', '40,5,,9,49,27,23,50,23,14,40,8,50,23,,,176,,,176,,145,98,44,145,133', '25,133,,44,99,55,44,39,94,189,48,189,23,12,26,139,139,,,48,,191,34,145', '6,,44,5,44,64,73,51,61,44,42,,,,74,76,42,,6,6,74,40,6,,36,2,,,,72,139', '189,,,44,,44,77,74,,,65,20,17,,,185,200,6,44,44,,51,51,61,,,133,133', ',154,34,,,,,23,,,,51,,74,10,10,,51,13,145,6,6,,,,,,,6,6,,36,,,,,,53', ',,,68,,,32,53,,,74,68,,41,133,44,133,6,26,41,74,,76,30,,,61,92,,,9,', ',,,,61,,,,25,,,,,,,,,139,,,133,,187,187,187,,,,,,,44,36,12,189,,,189', ',41,73,,23,32,,,,32,92,74,,40,,10,,,6,,12,,,,189,,,61,,,,,92,,,89,,', ',,,,,73,,,98,98,,,44,,,189,,191,,,191,44,,191,98,191,64,,,61,185,34', '9,,,44,34,23,22,22,23,95,155,,22,22,,12,22,,51,,12,,51,,,53,6,34,,68', '65,6,17,189,,,53,,,74,68,,74,,,,51,6,,34,26,44,,,44,,6,6,71,,44,,,,', '60,,,,,,,44,73,10,10,44,,32,,,34,,51,,36,,,6,,6,,,,,191,,191,71,191', '74,191,,,,9,,,19,6,,44,44,,61,,,44,44,,,44,,,,,61,,,,23,23,,,,6,,,,', '22,29,,,34,191,98,29,,,,98,68,,51,,6,6,6,,,,25,,,,,,51,,,,,,,29,44,44', ',,6,23,23,,6,,,32,23,,,,,51,,,,,187,187,32,187,187,,187,,34,40,,,29', ',,,,44,,19,,138,,44,,,,,,44,44,,19,,,23,44,,,23,23,,,,,,,44,,68,23,', ',,98,29,,143,,,,68,98,,29,,,138,,,,,,,,,,,,,,44,23,23,,44,44,,,24,,', '23,,,24,44,,,,,12,,34,12,,,,,143,24,143,,6,6,6,6,,6,24,24,24,,24,24', '24,44,,44,44,,23,61,,,23,98,,44,44,,187,187,187,187,,27,,,36,29,6,,24', '24,,,24,24,29,,56,,,,23,74,56,,,,,,6,,29,,44,,,34,44,61,,6,,,,,,,6,6', '6,6,56,56,56,23,,,24,,,187,,24,24,24,24,24,44,140,23,,6,,,23,,,23,23', ',,,12,12,,,56,,,56,,,,,29,,29,,,,44,29,138,,,138,,,138,,138,,,,140,44', ',140,,,44,,,44,44,,29,,,56,,,,,,,,,56,,12,44,,,143,,143,,,,,,24,24,24', '24,,,,,24,24,24,24,24,24,,,,143,,143,,143,,,,24,,,,141,141,141,,12,', ',,12,12,,,,,,,,,,12,,,,29,,,,,,,24,138,,138,,138,24,138,,24,,57,,56', ',,,57,,,,12,12,,,,,,,24,,24,,,,24,24,143,56,143,,143,,,,57,57,57,,,', '138,24,,,,143,,,,,24,,24,,,,,,,12,,,,12,,24,24,,,57,,140,57,,140,,143', '140,24,140,24,,,,,,,29,,,56,,56,12,,,56,56,,,,28,,,,,,28,,,,,57,56,141', '141,141,141,,141,,57,56,69,,,12,,24,,,69,,,,28,28,28,,,,12,,,,,12,,', ',56,,56,,,,,,29,,,29,,,,,,,,,28,,,,,,24,,,,,140,,140,,140,,140,,,,,141', '141,141,141,,69,,69,56,69,,,69,,,57,,,,,,28,,,141,,,,,,28,,,,,,29,,', '140,57,24,,,,,,,24,,24,,,,,,24,,69,,,,,,24,,,,,,,,,,,,,,,,,,,,,,,,,', ',29,29,,,,,,,,,,,57,,57,,,,57,57,,24,56,,24,28,,,,56,24,,,,,57,,56,', ',,,24,,57,,24,69,,,28,29,29,,,,,,29,,,,,,,,,,,,,,57,,57,,,,,,,24,24', ',,,,24,24,,,24,,56,,,56,,,,,,,29,,,,29,29,,,,,28,,28,,,29,28,28,,57', '24,,,,,,,69,,,69,24,69,28,,,69,,,,,,28,24,24,,,29,29,,,,,,,,,29,,,,', ',,,,,,69,,28,69,28,,,,,,,,,,24,,,,,,24,,,,56,,24,24,29,,69,,29,24,,56', '29,,,,,,,,24,,,56,56,,,,28,,,,57,,,,,,29,57,,,,,,,,57,,,,24,,,24,,,', '24,24,,,,,,,,,,24,,29,69,,56,56,69,69,,,,56,,,,,29,,,,,29,,,29,29,,', ',24,,24,24,57,,,57,,,,,24,24,69,,,69,,,,,,,56,,,56,,,,56,56,,28,,,69', ',,,28,56,,,,,24,,28,,24,,,,24,,69,,24,,,,,,,,,,,,,,,56,56,,69,,,,,,', '56,24,,,,,,,,,,,,,,,,,,,,28,57,,28,,,69,,,,,,57,24,56,,,,56,,,,56,,57', '57,56,,24,,,,,24,,,24,24,,,,,,,,,,,,,,,56,,24,,,,,,,,,,,,,,,,,,,,,57', '57,,,,,,57,,,56,,,,,,,,,,,,,,,56,,28,,,56,,,56,56,,,,28,,,,,69,,,,,', '57,28,28,57,,,,57,57,,,,,,,,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,69,,,57', '57,28,28,,,,,28,28,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,57,,,,57,,28', ',57,28,35,,57,28,28,,,,,35,35,35,,,28,,,,,,,,35,35,35,,,,57,,,,,,,,', ',,35,,,,,,,28,28,,,,,,,,,28,,,,,57,,,,,,,,,,,,,,,57,,,,,57,,,57,57,', ',,,,28,,,,28,,,,28,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,28,,,,,28,,,28,28,35,35,35,,,,,35', '35,,,,,,,,,,,,,,,35,,,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35', '35,35,35,35,35,35,35,35,35,35,,,,,,,35,,,,,,35,,,35,,,,,,,35,,35,,35', ',,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,35,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,35,35,35,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,35,,,35,,35,,,,35,,,,,,,,,,,,35,,,,,,,,,35,35', ',,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,35', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,,,35,35,35,35,,,,', '35,35,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,35,', ',,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,35,,,,,,,,,,,', ',,,,,,,,,,35,,35,,,,,,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ] racc_goto_check = arr = ::Array.new(3110, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_goto_pointer = [ nil, 206, 23, 266, nil, 62, -2, 113, 72, 235, -281, 249, 358, -532, -629, -566, nil, 40, 237, 3, -206, 175, 5, 64, 927, -211, -347, 9, 1305, 781, -176, -36, -27, 47, -19, 2094, -26, nil, nil, 18, -167, 86, -230, -375, 110, -324, -650, nil, 123, 55, 63, -39, nil, -18, 21, -299, 999, 1204, -497, -219, -56, 5, nil, nil, 2, 38, -249, -6, -14, 1119, 99, -1, -270, 74, -10, -204, -255, -445, nil, nil, nil, nil, nil, nil, nil, nil, nil, 203, -68, -62, nil, 200, -332, -676, -474, -342, 199, -328, 31, -565, 214, 230, 230, -246, 231, 229, -436, 231, -437, -293, -839, 38, -628, -219, -611, -797, 77, -454, -215, -449, -716, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, -774, -470, -478, -774, -503, nil, 196, -401, 387, 365, -500, 232, -611, -517, nil, -537, -735, -820, -828, -172, -381, 105, -296, -16, -87, -488, nil, nil, -90, -487, -87, -484, -804, -400, -502, -627, nil, nil, 122, -30, 50, 118, 118, -256, -249, 123, 124, 128, -544, -387, -378, 145, -517, -310, nil, 0, -463, -325, -653, -263, -449, -627, nil, -637, -792, nil, nil, -110, -435 ] racc_goto_default = [ nil, nil, nil, nil, 5, nil, 295, 7, 348, 296, nil, nil, 536, nil, 855, nil, 294, nil, nil, nil, 14, 15, 21, 231, 324, nil, nil, 752, 229, 230, nil, nil, 20, nil, 332, 24, 25, 26, 27, nil, 694, nil, nil, nil, 313, nil, nil, 28, 424, 35, nil, nil, 37, 40, 39, nil, 226, 227, 600, nil, 132, 432, 131, 134, 78, 79, nil, 93, 49, 285, nil, 425, nil, 426, 437, 648, 499, 283, 268, 50, 51, 52, 53, 54, 55, 56, 57, 58, nil, 269, 64, nil, nil, nil, nil, nil, nil, nil, 584, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 724, 566, nil, 725, 954, 797, 554, nil, 555, nil, nil, 556, nil, 558, 664, nil, nil, nil, 564, nil, nil, nil, 762, nil, nil, nil, 436, 270, nil, nil, nil, nil, nil, nil, nil, nil, 77, 80, 82, nil, nil, nil, nil, nil, 610, nil, nil, nil, nil, nil, nil, nil, nil, 839, 553, nil, 557, 847, 569, 571, 572, 809, 575, 576, 810, 579, 582, nil, 289 ] racc_reduce_table = [ 0, 0, :racc_error, 0, 149, :_reduce_1, 2, 147, :_reduce_2, 2, 148, :_reduce_3, 1, 150, :_reduce_none, 1, 150, :_reduce_none, 3, 150, :_reduce_6, 2, 150, :_reduce_none, 1, 153, :_reduce_8, 0, 157, :_reduce_9, 5, 153, :_reduce_10, 4, 156, :_reduce_11, 2, 158, :_reduce_12, 1, 162, :_reduce_none, 1, 162, :_reduce_none, 3, 162, :_reduce_15, 2, 162, :_reduce_16, 0, 179, :_reduce_17, 4, 155, :_reduce_18, 3, 155, :_reduce_19, 3, 155, :_reduce_20, 3, 155, :_reduce_21, 2, 155, :_reduce_22, 3, 155, :_reduce_23, 3, 155, :_reduce_24, 3, 155, :_reduce_25, 3, 155, :_reduce_26, 3, 155, :_reduce_27, 4, 155, :_reduce_28, 1, 155, :_reduce_none, 3, 155, :_reduce_30, 3, 155, :_reduce_31, 6, 155, :_reduce_32, 5, 155, :_reduce_33, 5, 155, :_reduce_34, 5, 155, :_reduce_35, 5, 155, :_reduce_36, 3, 155, :_reduce_37, 3, 155, :_reduce_38, 3, 155, :_reduce_39, 1, 155, :_reduce_none, 3, 166, :_reduce_41, 3, 166, :_reduce_42, 1, 178, :_reduce_none, 3, 178, :_reduce_44, 3, 178, :_reduce_45, 3, 178, :_reduce_46, 2, 178, :_reduce_47, 1, 178, :_reduce_none, 1, 165, :_reduce_49, 1, 168, :_reduce_none, 1, 168, :_reduce_none, 1, 183, :_reduce_none, 4, 183, :_reduce_53, 0, 191, :_reduce_54, 0, 192, :_reduce_55, 6, 188, :_reduce_56, 1, 190, :_reduce_57, 2, 182, :_reduce_58, 3, 182, :_reduce_59, 4, 182, :_reduce_60, 5, 182, :_reduce_61, 4, 182, :_reduce_62, 5, 182, :_reduce_63, 2, 182, :_reduce_64, 2, 182, :_reduce_65, 2, 182, :_reduce_66, 2, 182, :_reduce_67, 2, 182, :_reduce_68, 1, 167, :_reduce_none, 3, 167, :_reduce_70, 1, 196, :_reduce_none, 3, 196, :_reduce_72, 1, 195, :_reduce_73, 2, 195, :_reduce_74, 3, 195, :_reduce_75, 5, 195, :_reduce_76, 2, 195, :_reduce_77, 4, 195, :_reduce_78, 2, 195, :_reduce_79, 4, 195, :_reduce_80, 1, 195, :_reduce_81, 3, 195, :_reduce_82, 1, 199, :_reduce_none, 3, 199, :_reduce_84, 2, 198, :_reduce_85, 3, 198, :_reduce_86, 1, 201, :_reduce_87, 3, 201, :_reduce_88, 1, 200, :_reduce_89, 1, 200, :_reduce_90, 4, 200, :_reduce_91, 3, 200, :_reduce_92, 3, 200, :_reduce_93, 3, 200, :_reduce_94, 3, 200, :_reduce_95, 2, 200, :_reduce_96, 1, 200, :_reduce_97, 1, 175, :_reduce_98, 1, 175, :_reduce_99, 4, 175, :_reduce_100, 3, 175, :_reduce_101, 3, 175, :_reduce_102, 3, 175, :_reduce_103, 3, 175, :_reduce_104, 2, 175, :_reduce_105, 1, 175, :_reduce_106, 1, 204, :_reduce_107, 1, 204, :_reduce_none, 2, 205, :_reduce_109, 1, 205, :_reduce_110, 3, 205, :_reduce_111, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_115, 1, 206, :_reduce_116, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 163, :_reduce_119, 1, 163, :_reduce_none, 1, 164, :_reduce_121, 0, 212, :_reduce_122, 4, 164, :_reduce_123, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 3, 181, :_reduce_195, 5, 181, :_reduce_196, 3, 181, :_reduce_197, 5, 181, :_reduce_198, 6, 181, :_reduce_199, 5, 181, :_reduce_200, 5, 181, :_reduce_201, 5, 181, :_reduce_202, 5, 181, :_reduce_203, 4, 181, :_reduce_204, 3, 181, :_reduce_205, 3, 181, :_reduce_206, 3, 181, :_reduce_207, 3, 181, :_reduce_208, 3, 181, :_reduce_209, 3, 181, :_reduce_210, 3, 181, :_reduce_211, 3, 181, :_reduce_212, 3, 181, :_reduce_213, 4, 181, :_reduce_214, 2, 181, :_reduce_215, 2, 181, :_reduce_216, 3, 181, :_reduce_217, 3, 181, :_reduce_218, 3, 181, :_reduce_219, 3, 181, :_reduce_220, 3, 181, :_reduce_221, 3, 181, :_reduce_222, 3, 181, :_reduce_223, 3, 181, :_reduce_224, 3, 181, :_reduce_225, 3, 181, :_reduce_226, 3, 181, :_reduce_227, 3, 181, :_reduce_228, 3, 181, :_reduce_229, 2, 181, :_reduce_230, 2, 181, :_reduce_231, 3, 181, :_reduce_232, 3, 181, :_reduce_233, 3, 181, :_reduce_234, 3, 181, :_reduce_235, 3, 181, :_reduce_236, 6, 181, :_reduce_237, 1, 181, :_reduce_none, 1, 215, :_reduce_239, 1, 216, :_reduce_none, 2, 216, :_reduce_241, 4, 216, :_reduce_242, 2, 216, :_reduce_243, 3, 220, :_reduce_244, 1, 221, :_reduce_none, 1, 221, :_reduce_none, 1, 171, :_reduce_247, 1, 171, :_reduce_248, 2, 171, :_reduce_249, 4, 171, :_reduce_250, 2, 171, :_reduce_251, 1, 194, :_reduce_252, 2, 194, :_reduce_253, 2, 194, :_reduce_254, 4, 194, :_reduce_255, 1, 194, :_reduce_256, 0, 224, :_reduce_257, 2, 187, :_reduce_258, 2, 223, :_reduce_259, 2, 222, :_reduce_260, 1, 222, :_reduce_none, 1, 217, :_reduce_262, 2, 217, :_reduce_263, 3, 217, :_reduce_264, 4, 217, :_reduce_265, 1, 177, :_reduce_266, 1, 177, :_reduce_267, 3, 176, :_reduce_268, 4, 176, :_reduce_269, 2, 176, :_reduce_270, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_281, 0, 247, :_reduce_282, 4, 214, :_reduce_283, 2, 214, :_reduce_284, 0, 248, :_reduce_285, 0, 249, :_reduce_286, 5, 214, :_reduce_287, 3, 214, :_reduce_288, 3, 214, :_reduce_289, 2, 214, :_reduce_290, 3, 214, :_reduce_291, 0, 250, :_reduce_292, 4, 214, :_reduce_293, 1, 214, :_reduce_294, 4, 214, :_reduce_295, 3, 214, :_reduce_296, 1, 214, :_reduce_297, 5, 214, :_reduce_298, 4, 214, :_reduce_299, 3, 214, :_reduce_300, 2, 214, :_reduce_301, 1, 214, :_reduce_none, 2, 214, :_reduce_303, 2, 214, :_reduce_304, 6, 214, :_reduce_305, 6, 214, :_reduce_306, 0, 251, :_reduce_307, 0, 252, :_reduce_308, 7, 214, :_reduce_309, 0, 253, :_reduce_310, 0, 254, :_reduce_311, 7, 214, :_reduce_312, 5, 214, :_reduce_313, 4, 214, :_reduce_314, 0, 255, :_reduce_315, 0, 256, :_reduce_316, 9, 214, :_reduce_317, 0, 257, :_reduce_318, 0, 258, :_reduce_319, 7, 214, :_reduce_320, 0, 259, :_reduce_321, 0, 260, :_reduce_322, 0, 261, :_reduce_323, 9, 214, :_reduce_324, 0, 262, :_reduce_325, 0, 263, :_reduce_326, 6, 214, :_reduce_327, 0, 264, :_reduce_328, 6, 214, :_reduce_329, 0, 265, :_reduce_330, 0, 266, :_reduce_331, 9, 214, :_reduce_332, 1, 214, :_reduce_333, 1, 214, :_reduce_334, 1, 214, :_reduce_335, 1, 214, :_reduce_336, 1, 170, :_reduce_337, 1, 267, :_reduce_none, 1, 268, :_reduce_none, 1, 269, :_reduce_none, 1, 270, :_reduce_none, 1, 271, :_reduce_none, 1, 272, :_reduce_none, 1, 273, :_reduce_none, 1, 274, :_reduce_none, 1, 275, :_reduce_none, 1, 276, :_reduce_none, 1, 277, :_reduce_none, 1, 238, :_reduce_none, 1, 238, :_reduce_none, 2, 238, :_reduce_none, 1, 240, :_reduce_none, 1, 240, :_reduce_none, 1, 239, :_reduce_none, 5, 239, :_reduce_355, 1, 160, :_reduce_none, 2, 160, :_reduce_357, 1, 242, :_reduce_none, 1, 242, :_reduce_359, 1, 278, :_reduce_none, 3, 278, :_reduce_361, 1, 281, :_reduce_362, 3, 281, :_reduce_363, 1, 280, :_reduce_364, 4, 280, :_reduce_365, 6, 280, :_reduce_366, 3, 280, :_reduce_367, 5, 280, :_reduce_368, 2, 280, :_reduce_369, 4, 280, :_reduce_370, 1, 280, :_reduce_371, 3, 280, :_reduce_372, 4, 282, :_reduce_373, 2, 282, :_reduce_374, 2, 282, :_reduce_375, 1, 282, :_reduce_376, 2, 287, :_reduce_377, 1, 287, :_reduce_none, 6, 288, :_reduce_379, 8, 288, :_reduce_380, 4, 288, :_reduce_381, 6, 288, :_reduce_382, 4, 288, :_reduce_383, 2, 288, :_reduce_384, 6, 288, :_reduce_385, 2, 288, :_reduce_386, 4, 288, :_reduce_387, 6, 288, :_reduce_388, 2, 288, :_reduce_389, 4, 288, :_reduce_390, 2, 288, :_reduce_391, 4, 288, :_reduce_392, 1, 288, :_reduce_393, 1, 189, :_reduce_394, 1, 189, :_reduce_none, 3, 292, :_reduce_396, 1, 292, :_reduce_397, 4, 292, :_reduce_398, 1, 293, :_reduce_none, 4, 293, :_reduce_400, 1, 294, :_reduce_401, 3, 294, :_reduce_402, 1, 295, :_reduce_403, 1, 295, :_reduce_none, 0, 299, :_reduce_405, 3, 237, :_reduce_406, 4, 297, :_reduce_407, 1, 297, :_reduce_408, 3, 298, :_reduce_409, 3, 298, :_reduce_410, 0, 302, :_reduce_411, 0, 303, :_reduce_412, 6, 301, :_reduce_413, 2, 184, :_reduce_414, 4, 184, :_reduce_415, 5, 184, :_reduce_416, 5, 184, :_reduce_417, 0, 305, :_reduce_418, 3, 236, :_reduce_419, 4, 236, :_reduce_420, 4, 236, :_reduce_421, 3, 236, :_reduce_422, 3, 236, :_reduce_423, 3, 236, :_reduce_424, 2, 236, :_reduce_425, 1, 236, :_reduce_426, 4, 236, :_reduce_427, 0, 306, :_reduce_428, 0, 307, :_reduce_429, 6, 235, :_reduce_430, 0, 308, :_reduce_431, 0, 309, :_reduce_432, 6, 235, :_reduce_433, 0, 311, :_reduce_434, 6, 241, :_reduce_435, 1, 310, :_reduce_none, 1, 310, :_reduce_none, 6, 159, :_reduce_438, 0, 159, :_reduce_439, 1, 312, :_reduce_440, 1, 312, :_reduce_none, 1, 312, :_reduce_none, 2, 313, :_reduce_443, 1, 313, :_reduce_none, 2, 161, :_reduce_445, 1, 161, :_reduce_none, 1, 225, :_reduce_447, 1, 225, :_reduce_448, 1, 225, :_reduce_none, 1, 226, :_reduce_450, 1, 315, :_reduce_451, 1, 315, :_reduce_none, 2, 315, :_reduce_453, 3, 316, :_reduce_454, 1, 316, :_reduce_455, 3, 227, :_reduce_456, 3, 228, :_reduce_457, 3, 229, :_reduce_458, 3, 229, :_reduce_459, 1, 320, :_reduce_460, 3, 320, :_reduce_461, 1, 321, :_reduce_none, 2, 321, :_reduce_463, 3, 231, :_reduce_464, 3, 231, :_reduce_465, 1, 323, :_reduce_466, 3, 323, :_reduce_467, 3, 230, :_reduce_468, 3, 230, :_reduce_469, 3, 232, :_reduce_470, 3, 232, :_reduce_471, 1, 324, :_reduce_472, 3, 324, :_reduce_473, 1, 325, :_reduce_474, 3, 325, :_reduce_475, 1, 317, :_reduce_476, 2, 317, :_reduce_477, 1, 318, :_reduce_478, 2, 318, :_reduce_479, 1, 319, :_reduce_480, 2, 319, :_reduce_481, 1, 322, :_reduce_482, 0, 327, :_reduce_483, 3, 322, :_reduce_484, 0, 328, :_reduce_485, 4, 322, :_reduce_486, 1, 326, :_reduce_487, 1, 326, :_reduce_488, 1, 326, :_reduce_489, 1, 326, :_reduce_none, 2, 210, :_reduce_491, 1, 210, :_reduce_492, 1, 329, :_reduce_none, 1, 329, :_reduce_none, 1, 329, :_reduce_none, 1, 329, :_reduce_none, 3, 211, :_reduce_497, 1, 314, :_reduce_none, 2, 314, :_reduce_499, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 203, :_reduce_509, 1, 203, :_reduce_510, 1, 203, :_reduce_511, 1, 203, :_reduce_512, 1, 203, :_reduce_513, 1, 203, :_reduce_514, 1, 203, :_reduce_515, 1, 233, :_reduce_516, 1, 233, :_reduce_517, 1, 169, :_reduce_518, 1, 169, :_reduce_519, 1, 174, :_reduce_520, 1, 174, :_reduce_521, 1, 243, :_reduce_522, 0, 330, :_reduce_523, 4, 243, :_reduce_524, 2, 243, :_reduce_525, 3, 245, :_reduce_526, 2, 245, :_reduce_527, 4, 331, :_reduce_528, 2, 331, :_reduce_529, 2, 331, :_reduce_530, 1, 331, :_reduce_none, 2, 333, :_reduce_532, 0, 333, :_reduce_533, 6, 300, :_reduce_534, 8, 300, :_reduce_535, 4, 300, :_reduce_536, 6, 300, :_reduce_537, 4, 300, :_reduce_538, 6, 300, :_reduce_539, 2, 300, :_reduce_540, 4, 300, :_reduce_541, 6, 300, :_reduce_542, 2, 300, :_reduce_543, 4, 300, :_reduce_544, 2, 300, :_reduce_545, 4, 300, :_reduce_546, 1, 300, :_reduce_547, 0, 300, :_reduce_548, 1, 296, :_reduce_549, 1, 296, :_reduce_550, 1, 296, :_reduce_551, 1, 296, :_reduce_552, 1, 279, :_reduce_none, 1, 279, :_reduce_554, 1, 335, :_reduce_none, 1, 336, :_reduce_none, 3, 336, :_reduce_557, 1, 289, :_reduce_558, 3, 289, :_reduce_559, 1, 337, :_reduce_none, 2, 338, :_reduce_561, 1, 338, :_reduce_562, 2, 339, :_reduce_563, 1, 339, :_reduce_564, 1, 283, :_reduce_none, 3, 283, :_reduce_566, 1, 332, :_reduce_none, 3, 332, :_reduce_568, 1, 340, :_reduce_none, 1, 340, :_reduce_none, 2, 284, :_reduce_571, 1, 284, :_reduce_572, 3, 341, :_reduce_573, 3, 342, :_reduce_574, 1, 290, :_reduce_575, 3, 290, :_reduce_576, 1, 334, :_reduce_577, 3, 334, :_reduce_578, 1, 343, :_reduce_none, 1, 343, :_reduce_none, 2, 291, :_reduce_581, 1, 291, :_reduce_582, 1, 344, :_reduce_none, 1, 344, :_reduce_none, 2, 286, :_reduce_585, 2, 285, :_reduce_586, 0, 285, :_reduce_587, 1, 246, :_reduce_none, 0, 345, :_reduce_589, 4, 246, :_reduce_590, 1, 234, :_reduce_591, 2, 234, :_reduce_592, 1, 219, :_reduce_none, 3, 219, :_reduce_594, 3, 346, :_reduce_595, 3, 346, :_reduce_596, 4, 346, :_reduce_597, 2, 346, :_reduce_598, 2, 346, :_reduce_599, 1, 193, :_reduce_none, 1, 193, :_reduce_none, 1, 193, :_reduce_none, 1, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 304, :_reduce_none, 1, 304, :_reduce_none, 1, 304, :_reduce_none, 1, 185, :_reduce_none, 1, 185, :_reduce_none, 1, 173, :_reduce_none, 1, 173, :_reduce_none, 0, 151, :_reduce_none, 1, 151, :_reduce_none, 0, 180, :_reduce_none, 1, 180, :_reduce_none, 2, 197, :_reduce_none, 2, 172, :_reduce_none, 0, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 244, :_reduce_623, 1, 244, :_reduce_none, 1, 154, :_reduce_none, 2, 154, :_reduce_626, 0, 152, :_reduce_627 ] racc_reduce_n = 628 racc_shift_n = 1059 racc_token_table = { false => 0, :error => 1, :kCLASS => 2, :kMODULE => 3, :kDEF => 4, :kUNDEF => 5, :kBEGIN => 6, :kRESCUE => 7, :kENSURE => 8, :kEND => 9, :kIF => 10, :kUNLESS => 11, :kTHEN => 12, :kELSIF => 13, :kELSE => 14, :kCASE => 15, :kWHEN => 16, :kWHILE => 17, :kUNTIL => 18, :kFOR => 19, :kBREAK => 20, :kNEXT => 21, :kREDO => 22, :kRETRY => 23, :kIN => 24, :kDO => 25, :kDO_COND => 26, :kDO_BLOCK => 27, :kDO_LAMBDA => 28, :kRETURN => 29, :kYIELD => 30, :kSUPER => 31, :kSELF => 32, :kNIL => 33, :kTRUE => 34, :kFALSE => 35, :kAND => 36, :kOR => 37, :kNOT => 38, :kIF_MOD => 39, :kUNLESS_MOD => 40, :kWHILE_MOD => 41, :kUNTIL_MOD => 42, :kRESCUE_MOD => 43, :kALIAS => 44, :kDEFINED => 45, :klBEGIN => 46, :klEND => 47, :k__LINE__ => 48, :k__FILE__ => 49, :k__ENCODING__ => 50, :tIDENTIFIER => 51, :tFID => 52, :tGVAR => 53, :tIVAR => 54, :tCONSTANT => 55, :tLABEL => 56, :tCVAR => 57, :tNTH_REF => 58, :tBACK_REF => 59, :tSTRING_CONTENT => 60, :tINTEGER => 61, :tFLOAT => 62, :tREGEXP_END => 63, :tUPLUS => 64, :tUMINUS => 65, :tUMINUS_NUM => 66, :tPOW => 67, :tCMP => 68, :tEQ => 69, :tEQQ => 70, :tNEQ => 71, :tGEQ => 72, :tLEQ => 73, :tANDOP => 74, :tOROP => 75, :tMATCH => 76, :tNMATCH => 77, :tDOT => 78, :tDOT2 => 79, :tDOT3 => 80, :tAREF => 81, :tASET => 82, :tLSHFT => 83, :tRSHFT => 84, :tCOLON2 => 85, :tCOLON3 => 86, :tOP_ASGN => 87, :tASSOC => 88, :tLPAREN => 89, :tLPAREN2 => 90, :tRPAREN => 91, :tLPAREN_ARG => 92, :tLBRACK => 93, :tLBRACK2 => 94, :tRBRACK => 95, :tLBRACE => 96, :tLBRACE_ARG => 97, :tSTAR => 98, :tSTAR2 => 99, :tAMPER => 100, :tAMPER2 => 101, :tTILDE => 102, :tPERCENT => 103, :tDIVIDE => 104, :tPLUS => 105, :tMINUS => 106, :tLT => 107, :tGT => 108, :tPIPE => 109, :tBANG => 110, :tCARET => 111, :tLCURLY => 112, :tRCURLY => 113, :tBACK_REF2 => 114, :tSYMBEG => 115, :tSTRING_BEG => 116, :tXSTRING_BEG => 117, :tREGEXP_BEG => 118, :tWORDS_BEG => 119, :tQWORDS_BEG => 120, :tSTRING_DBEG => 121, :tSTRING_DVAR => 122, :tSTRING_END => 123, :tSTRING => 124, :tSYMBOL => 125, :tNL => 126, :tEH => 127, :tCOLON => 128, :tCOMMA => 129, :tSPACE => 130, :tSEMI => 131, :tLAMBDA => 132, :tLAMBEG => 133, :tDSTAR => 134, :tCHAR => 135, :tSYMBOLS_BEG => 136, :tQSYMBOLS_BEG => 137, :tSTRING_DEND => 138, :tUBANG => 139, :tRATIONAL => 140, :tIMAGINARY => 141, :tLABEL_END => 142, :tLONELY => 143, :tEQL => 144, :tLOWEST => 145 } racc_nt_base = 146 racc_use_result_var = true Racc_arg = [ racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var ] Racc_token_to_s_table = [ "$end", "error", "kCLASS", "kMODULE", "kDEF", "kUNDEF", "kBEGIN", "kRESCUE", "kENSURE", "kEND", "kIF", "kUNLESS", "kTHEN", "kELSIF", "kELSE", "kCASE", "kWHEN", "kWHILE", "kUNTIL", "kFOR", "kBREAK", "kNEXT", "kREDO", "kRETRY", "kIN", "kDO", "kDO_COND", "kDO_BLOCK", "kDO_LAMBDA", "kRETURN", "kYIELD", "kSUPER", "kSELF", "kNIL", "kTRUE", "kFALSE", "kAND", "kOR", "kNOT", "kIF_MOD", "kUNLESS_MOD", "kWHILE_MOD", "kUNTIL_MOD", "kRESCUE_MOD", "kALIAS", "kDEFINED", "klBEGIN", "klEND", "k__LINE__", "k__FILE__", "k__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tLABEL", "tCVAR", "tNTH_REF", "tBACK_REF", "tSTRING_CONTENT", "tINTEGER", "tFLOAT", "tREGEXP_END", "tUPLUS", "tUMINUS", "tUMINUS_NUM", "tPOW", "tCMP", "tEQ", "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", "tDOT", "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN2", "tRPAREN", "tLPAREN_ARG", "tLBRACK", "tLBRACK2", "tRBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tSTAR2", "tAMPER", "tAMPER2", "tTILDE", "tPERCENT", "tDIVIDE", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tDSTAR", "tCHAR", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DEND", "tUBANG", "tRATIONAL", "tIMAGINARY", "tLABEL_END", "tLONELY", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "@1", "top_stmts", "opt_terms", "none", "top_stmt", "terms", "stmt", "bodystmt", "@2", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", "lhs", "mrhs", "mrhs_arg", "expr", "@3", "opt_nl", "arg", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "fcall", "@4", "@5", "operation", "call_args", "mlhs_basic", "mlhs_inner", "rparen", "mlhs_head", "mlhs_item", "mlhs_node", "mlhs_post", "user_variable", "keyword_variable", "cname", "cpath", "fname", "op", "reswords", "fsym", "symbol", "dsym", "@6", "simple_numeric", "primary", "arg_value", "aref_args", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@7", "literal", "strings", "xstring", "regexp", "words", "qwords", "symbols", "qsymbols", "var_ref", "assoc_list", "brace_block", "method_call", "lambda", "then", "if_tail", "do", "case_body", "for_var", "superclass", "term", "f_arglist", "singleton", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23", "@24", "@25", "@26", "@27", "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "f_marg", "f_norm_arg", "f_margs", "f_marg_list", "block_args_tail", "f_block_kwarg", "f_kwrest", "opt_f_block_arg", "f_block_arg", "opt_block_args_tail", "block_param", "f_arg", "f_block_optarg", "f_rest_arg", "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "f_bad_arg", "f_larglist", "lambda_body", "@28", "f_args", "do_block", "@29", "@30", "operation3", "@31", "@32", "@33", "@34", "@35", "cases", "@36", "exc_list", "exc_var", "numeric", "string", "string1", "string_contents", "xstring_contents", "regexp_contents", "word_list", "word", "string_content", "symbol_list", "qword_list", "qsym_list", "string_dvar", "@37", "@38", "sym", "@39", "args_tail", "f_kwarg", "opt_args_tail", "f_optarg", "f_arg_asgn", "f_arg_item", "f_label", "f_kw", "f_block_kw", "kwrest_mark", "f_opt", "f_block_opt", "restarg_mark", "blkarg_mark", "@40", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted def _reduce_1(val, _values, result) self.lexer.lex_state = :expr_beg result end def _reduce_2(val, _values, result) result = new_compstmt val result end def _reduce_3(val, _values, result) result = val[0] result end # reduce 4 omitted # reduce 5 omitted def _reduce_6(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = val[0] # TODO: remove once I have more confidence this is fixed # result.each_of_type :call_args do |s| # debug20 666, s, result # end result end def _reduce_9(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 1 yyerror "BEGIN in method" end self.env.extend result end def _reduce_10(val, _values, result) result = new_iter s(:preexe), nil, val[3] result end def _reduce_11(val, _values, result) result = new_body val result end def _reduce_12(val, _values, result) result = new_compstmt val result end # reduce 13 omitted # reduce 14 omitted def _reduce_15(val, _values, result) result = self.block_append val[0], val[2] result end def _reduce_16(val, _values, result) result = val[1] debug20 2, val, result result end def _reduce_17(val, _values, result) lexer.lex_state = :expr_fname result = self.lexer.lineno result end def _reduce_18(val, _values, result) result = s(:alias, val[1], val[3]).line(val[2]) result end def _reduce_19(val, _values, result) result = s(:valias, val[1].to_sym, val[2].to_sym) result end def _reduce_20(val, _values, result) result = s(:valias, val[1].to_sym, :"$#{val[2]}") result end def _reduce_21(val, _values, result) yyerror "can't make alias for the number variables" result end def _reduce_22(val, _values, result) result = val[1] result end def _reduce_23(val, _values, result) result = new_if val[2], val[0], nil result end def _reduce_24(val, _values, result) result = new_if val[2], nil, val[0] result end def _reduce_25(val, _values, result) result = new_while val[0], val[2], true result end def _reduce_26(val, _values, result) result = new_until val[0], val[2], true result end def _reduce_27(val, _values, result) result = s(:rescue, val[0], new_resbody(s(:array), val[2])) result end def _reduce_28(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] result end # reduce 29 omitted def _reduce_30(val, _values, result) result = new_masgn val[0], val[2], :wrap result end def _reduce_31(val, _values, result) result = new_op_asgn val result end def _reduce_32(val, _values, result) result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_33(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line result end def _reduce_34(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line result end def _reduce_35(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 4, val, result result end def _reduce_36(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 5, val, result result end def _reduce_37(val, _values, result) self.backref_assign_error val[0] result end def _reduce_38(val, _values, result) result = new_assign val[0], s(:svalue, val[2]) result end def _reduce_39(val, _values, result) result = new_masgn val[0], val[2] result end # reduce 40 omitted def _reduce_41(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_42(val, _values, result) result = new_assign val[0], val[2] result end # reduce 43 omitted def _reduce_44(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_45(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_46(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_47(val, _values, result) result = s(:call, val[1], :"!") result end # reduce 48 omitted def _reduce_49(val, _values, result) result = value_expr(val[0]) result end # reduce 50 omitted # reduce 51 omitted # reduce 52 omitted def _reduce_53(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_54(val, _values, result) self.env.extend(:dynamic) result = self.lexer.lineno result end def _reduce_55(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_56(val, _values, result) result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend result end def _reduce_57(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_58(val, _values, result) result = val[0].concat val[1].sexp_body # REFACTOR pattern result end def _reduce_59(val, _values, result) result = val[0].concat val[1].sexp_body if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end result end def _reduce_60(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_61(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] block_dup_check call, block block.insert 1, call result = block result end def _reduce_62(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_63(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block result end def _reduce_64(val, _values, result) result = new_super val[1] result end def _reduce_65(val, _values, result) result = new_yield val[1] result end def _reduce_66(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) result end def _reduce_67(val, _values, result) line = val[0].last result = s(:break, ret_args(val[1])).line(line) result end def _reduce_68(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) result end # reduce 69 omitted def _reduce_70(val, _values, result) result = val[1] result end # reduce 71 omitted def _reduce_72(val, _values, result) result = s(:masgn, s(:array, val[1])) result end def _reduce_73(val, _values, result) result = s(:masgn, val[0]) result end def _reduce_74(val, _values, result) result = s(:masgn, val[0] << val[1].compact) result end def _reduce_75(val, _values, result) result = s(:masgn, val[0] << s(:splat, val[2])) result end def _reduce_76(val, _values, result) ary1, _, splat, _, ary2 = val result = list_append ary1, s(:splat, splat) result.concat ary2.sexp_body result = s(:masgn, result) result end def _reduce_77(val, _values, result) result = s(:masgn, val[0] << s(:splat)) result end def _reduce_78(val, _values, result) ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_79(val, _values, result) result = s(:masgn, s(:array, s(:splat, val[1]))) result end def _reduce_80(val, _values, result) ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_81(val, _values, result) result = s(:masgn, s(:array, s(:splat))) result end def _reduce_82(val, _values, result) result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) result end # reduce 83 omitted def _reduce_84(val, _values, result) result = val[1] result end def _reduce_85(val, _values, result) result = s(:array, val[0]) result end def _reduce_86(val, _values, result) result = val[0] << val[1].compact result end def _reduce_87(val, _values, result) result = s(:array, val[0]) result end def _reduce_88(val, _values, result) result = list_append val[0], val[2] result end def _reduce_89(val, _values, result) result = self.assignable val[0] result end def _reduce_90(val, _values, result) result = self.assignable val[0] result end def _reduce_91(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_92(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_93(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_94(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_95(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) result end def _reduce_96(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) result end def _reduce_97(val, _values, result) self.backref_assign_error val[0] result end def _reduce_98(val, _values, result) result = self.assignable val[0] result end def _reduce_99(val, _values, result) result = self.assignable val[0] debug20 9, val, result result end def _reduce_100(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_101(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_102(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_103(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_104(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) result end def _reduce_105(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) result end def _reduce_106(val, _values, result) self.backref_assign_error val[0] result end def _reduce_107(val, _values, result) yyerror "class/module name must be CONSTANT" result end # reduce 108 omitted def _reduce_109(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_110(val, _values, result) result = val[0].to_sym result end def _reduce_111(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end # reduce 112 omitted # reduce 113 omitted # reduce 114 omitted def _reduce_115(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end def _reduce_116(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end # reduce 117 omitted # reduce 118 omitted def _reduce_119(val, _values, result) result = s(:lit, val[0].to_sym) result end # reduce 120 omitted def _reduce_121(val, _values, result) result = new_undef val[0] result end def _reduce_122(val, _values, result) lexer.lex_state = :expr_fname result end def _reduce_123(val, _values, result) result = new_undef val[0], val[3] result end # reduce 124 omitted # reduce 125 omitted # reduce 126 omitted # reduce 127 omitted # reduce 128 omitted # reduce 129 omitted # reduce 130 omitted # reduce 131 omitted # reduce 132 omitted # reduce 133 omitted # reduce 134 omitted # reduce 135 omitted # reduce 136 omitted # reduce 137 omitted # reduce 138 omitted # reduce 139 omitted # reduce 140 omitted # reduce 141 omitted # reduce 142 omitted # reduce 143 omitted # reduce 144 omitted # reduce 145 omitted # reduce 146 omitted # reduce 147 omitted # reduce 148 omitted # reduce 149 omitted # reduce 150 omitted # reduce 151 omitted # reduce 152 omitted # reduce 153 omitted # reduce 154 omitted # reduce 155 omitted # reduce 156 omitted # reduce 157 omitted # reduce 158 omitted # reduce 159 omitted # reduce 160 omitted # reduce 161 omitted # reduce 162 omitted # reduce 163 omitted # reduce 164 omitted # reduce 165 omitted # reduce 166 omitted # reduce 167 omitted # reduce 168 omitted # reduce 169 omitted # reduce 170 omitted # reduce 171 omitted # reduce 172 omitted # reduce 173 omitted # reduce 174 omitted # reduce 175 omitted # reduce 176 omitted # reduce 177 omitted # reduce 178 omitted # reduce 179 omitted # reduce 180 omitted # reduce 181 omitted # reduce 182 omitted # reduce 183 omitted # reduce 184 omitted # reduce 185 omitted # reduce 186 omitted # reduce 187 omitted # reduce 188 omitted # reduce 189 omitted # reduce 190 omitted # reduce 191 omitted # reduce 192 omitted # reduce 193 omitted # reduce 194 omitted def _reduce_195(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_196(val, _values, result) result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) result end def _reduce_197(val, _values, result) result = new_op_asgn val result end def _reduce_198(val, _values, result) result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) result end def _reduce_199(val, _values, result) val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_200(val, _values, result) result = new_op_asgn2 val result end def _reduce_201(val, _values, result) result = new_op_asgn2 val result end def _reduce_202(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) result end def _reduce_203(val, _values, result) yyerror "constant re-assignment" result end def _reduce_204(val, _values, result) yyerror "constant re-assignment" result end def _reduce_205(val, _values, result) self.backref_assign_error val[0] result end def _reduce_206(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end result end def _reduce_207(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end result end def _reduce_208(val, _values, result) result = new_call val[0], :+, argl(val[2]) result end def _reduce_209(val, _values, result) result = new_call val[0], :-, argl(val[2]) result end def _reduce_210(val, _values, result) result = new_call val[0], :*, argl(val[2]) result end def _reduce_211(val, _values, result) result = new_call val[0], :"/", argl(val[2]) result end def _reduce_212(val, _values, result) result = new_call val[0], :"%", argl(val[2]) result end def _reduce_213(val, _values, result) result = new_call val[0], :**, argl(val[2]) result end def _reduce_214(val, _values, result) result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") result end def _reduce_215(val, _values, result) result = new_call val[1], :"+@" result end def _reduce_216(val, _values, result) result = new_call val[1], :"-@" result end def _reduce_217(val, _values, result) result = new_call val[0], :"|", argl(val[2]) result end def _reduce_218(val, _values, result) result = new_call val[0], :"^", argl(val[2]) result end def _reduce_219(val, _values, result) result = new_call val[0], :"&", argl(val[2]) result end def _reduce_220(val, _values, result) result = new_call val[0], :"<=>", argl(val[2]) result end def _reduce_221(val, _values, result) result = new_call val[0], :">", argl(val[2]) result end def _reduce_222(val, _values, result) result = new_call val[0], :">=", argl(val[2]) result end def _reduce_223(val, _values, result) result = new_call val[0], :"<", argl(val[2]) result end def _reduce_224(val, _values, result) result = new_call val[0], :"<=", argl(val[2]) result end def _reduce_225(val, _values, result) result = new_call val[0], :"==", argl(val[2]) result end def _reduce_226(val, _values, result) result = new_call val[0], :"===", argl(val[2]) result end def _reduce_227(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) result end def _reduce_228(val, _values, result) result = new_match val[0], val[2] result end def _reduce_229(val, _values, result) result = s(:not, new_match(val[0], val[2])) result end def _reduce_230(val, _values, result) result = new_call val[1], :"!" result end def _reduce_231(val, _values, result) result = new_call value_expr(val[1]), :"~" result end def _reduce_232(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) result end def _reduce_233(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) result end def _reduce_234(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_235(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_236(val, _values, result) result = s(:defined, val[2]) result end def _reduce_237(val, _values, result) result = s(:if, val[0], val[2], val[5]) result end # reduce 238 omitted def _reduce_239(val, _values, result) result = value_expr(val[0]) result end # reduce 240 omitted def _reduce_241(val, _values, result) result = args [val[0]] result end def _reduce_242(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_243(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_244(val, _values, result) result = val[1] result end # reduce 245 omitted # reduce 246 omitted def _reduce_247(val, _values, result) result = val[0] result end def _reduce_248(val, _values, result) result = val[0] result end def _reduce_249(val, _values, result) result = args val result end def _reduce_250(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_251(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_252(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val result end def _reduce_253(val, _values, result) result = call_args val result = self.arg_blk_pass val[0], val[1] result end def _reduce_254(val, _values, result) result = call_args [array_to_hash(val[0])] result = self.arg_blk_pass result, val[1] result end def _reduce_255(val, _values, result) result = call_args [val[0], array_to_hash(val[2])] result = self.arg_blk_pass result, val[3] result end def _reduce_256(val, _values, result) result = call_args val result end def _reduce_257(val, _values, result) result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true result end def _reduce_258(val, _values, result) lexer.cmdarg.stack.replace val[0] result = val[1] result end def _reduce_259(val, _values, result) result = s(:block_pass, val[1]) result end def _reduce_260(val, _values, result) result = val[1] result end # reduce 261 omitted def _reduce_262(val, _values, result) result = s(:array, val[0]) result end def _reduce_263(val, _values, result) result = s(:array, s(:splat, val[1])) result end def _reduce_264(val, _values, result) result = self.list_append val[0], val[2] result end def _reduce_265(val, _values, result) result = self.list_append val[0], s(:splat, val[3]) result end def _reduce_266(val, _values, result) result = new_masgn_arg val[0] result end def _reduce_267(val, _values, result) result = new_masgn_arg val[0], :wrap result end def _reduce_268(val, _values, result) result = val[0] << val[2] result end def _reduce_269(val, _values, result) result = self.arg_concat val[0], val[3] result end def _reduce_270(val, _values, result) result = s(:splat, val[1]) result end # reduce 271 omitted # reduce 272 omitted # reduce 273 omitted # reduce 274 omitted # reduce 275 omitted # reduce 276 omitted # reduce 277 omitted # reduce 278 omitted # reduce 279 omitted # reduce 280 omitted def _reduce_281(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_282(val, _values, result) result = self.lexer.lineno result end def _reduce_283(val, _values, result) unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] result end def _reduce_284(val, _values, result) debug20 13, val, result result end def _reduce_285(val, _values, result) result = self.lexer.cmdarg.stack.dup lexer.cmdarg.stack.replace [false] # TODO add api for these result end def _reduce_286(val, _values, result) lexer.lex_state = :expr_endarg result end def _reduce_287(val, _values, result) warning "(...) interpreted as grouped expression" lexer.cmdarg.stack.replace val[1] result = val[2] result end def _reduce_288(val, _values, result) result = val[1] || s(:nil) result.paren = true result end def _reduce_289(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end def _reduce_290(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_291(val, _values, result) result = val[1] || s(:array) result.sexp_type = :array # aref_args is :args result end def _reduce_292(val, _values, result) result = self.lexer.lineno result end def _reduce_293(val, _values, result) result = new_hash val result end def _reduce_294(val, _values, result) result = s(:return) result end def _reduce_295(val, _values, result) result = new_yield val[2] result end def _reduce_296(val, _values, result) result = new_yield result end def _reduce_297(val, _values, result) result = new_yield result end def _reduce_298(val, _values, result) result = s(:defined, val[3]) result end def _reduce_299(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_300(val, _values, result) debug20 14, val, result result end def _reduce_301(val, _values, result) oper, iter = val[0], val[1] call = oper # FIX iter.insert 1, call result = iter call.line = iter.line result end # reduce 302 omitted def _reduce_303(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter result end def _reduce_304(val, _values, result) result = val[1] # TODO: fix lineno result end def _reduce_305(val, _values, result) result = new_if val[1], val[3], val[4] result end def _reduce_306(val, _values, result) result = new_if val[1], val[4], val[3] result end def _reduce_307(val, _values, result) lexer.cond.push true result end def _reduce_308(val, _values, result) lexer.cond.pop result end def _reduce_309(val, _values, result) result = new_while val[5], val[2], true result end def _reduce_310(val, _values, result) lexer.cond.push true result end def _reduce_311(val, _values, result) lexer.cond.pop result end def _reduce_312(val, _values, result) result = new_until val[5], val[2], true result end def _reduce_313(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_314(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_315(val, _values, result) lexer.cond.push true result end def _reduce_316(val, _values, result) lexer.cond.pop result end def _reduce_317(val, _values, result) result = new_for val[4], val[1], val[7] result end def _reduce_318(val, _values, result) result = self.lexer.lineno result end def _reduce_319(val, _values, result) self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend result end def _reduce_320(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_321(val, _values, result) result = self.lexer.lineno result end def _reduce_322(val, _values, result) result = self.in_def self.in_def = false result end def _reduce_323(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend result end def _reduce_324(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_325(val, _values, result) result = self.lexer.lineno result end def _reduce_326(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend result end def _reduce_327(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_328(val, _values, result) result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend # TODO: local->cmdargs = cmdarg_stack; # TODO: port local_push_gen and local_pop_gen lexer.cmdarg.stack.replace [false] result end def _reduce_329(val, _values, result) in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body result end def _reduce_330(val, _values, result) self.comments.push self.lexer.comments lexer.lex_state = :expr_fname result end def _reduce_331(val, _values, result) self.in_single += 1 self.env.extend lexer.lex_state = :expr_endfn # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] result end def _reduce_332(val, _values, result) line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body result end def _reduce_333(val, _values, result) result = s(:break) result end def _reduce_334(val, _values, result) result = s(:next) result end def _reduce_335(val, _values, result) result = s(:redo) result end def _reduce_336(val, _values, result) result = s(:retry) result end def _reduce_337(val, _values, result) result = value_expr(val[0]) result end # reduce 338 omitted # reduce 339 omitted # reduce 340 omitted # reduce 341 omitted # reduce 342 omitted # reduce 343 omitted # reduce 344 omitted # reduce 345 omitted # reduce 346 omitted # reduce 347 omitted # reduce 348 omitted # reduce 349 omitted # reduce 350 omitted # reduce 351 omitted # reduce 352 omitted # reduce 353 omitted # reduce 354 omitted def _reduce_355(val, _values, result) result = s(:if, val[1], val[3], val[4]) result end # reduce 356 omitted def _reduce_357(val, _values, result) result = val[1] result end # reduce 358 omitted def _reduce_359(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end # reduce 360 omitted def _reduce_361(val, _values, result) result = val[1] result end def _reduce_362(val, _values, result) result = s(:array, val[0]) result end def _reduce_363(val, _values, result) result = list_append val[0], val[2] result end def _reduce_364(val, _values, result) args, = val result = block_var args result end def _reduce_365(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym result end def _reduce_366(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 result end def _reduce_367(val, _values, result) args, _, _ = val result = block_var args, :* result end def _reduce_368(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 result end def _reduce_369(val, _values, result) _, splat = val result = block_var :"*#{splat}" result end def _reduce_370(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args result end def _reduce_371(val, _values, result) result = block_var :* result end def _reduce_372(val, _values, result) _, _, args = val result = block_var :*, args result end def _reduce_373(val, _values, result) result = call_args val result end def _reduce_374(val, _values, result) result = call_args val result end def _reduce_375(val, _values, result) result = call_args val result end def _reduce_376(val, _values, result) result = call_args val result end def _reduce_377(val, _values, result) result = args val result end # reduce 378 omitted def _reduce_379(val, _values, result) result = args val result end def _reduce_380(val, _values, result) result = args val result end def _reduce_381(val, _values, result) result = args val result end def _reduce_382(val, _values, result) result = args val result end def _reduce_383(val, _values, result) result = args val result end def _reduce_384(val, _values, result) result = args val result end def _reduce_385(val, _values, result) result = args val result end def _reduce_386(val, _values, result) result = args val result end def _reduce_387(val, _values, result) result = args val result end def _reduce_388(val, _values, result) result = args val result end def _reduce_389(val, _values, result) result = args val result end def _reduce_390(val, _values, result) result = args val result end def _reduce_391(val, _values, result) result = args val result end def _reduce_392(val, _values, result) result = args val result end def _reduce_393(val, _values, result) result = args val result end def _reduce_394(val, _values, result) result = 0 result end # reduce 395 omitted def _reduce_396(val, _values, result) result = args val result end def _reduce_397(val, _values, result) self.lexer.command_start = true result = s(:args) result end def _reduce_398(val, _values, result) result = args val result end # reduce 399 omitted def _reduce_400(val, _values, result) result = args val result end def _reduce_401(val, _values, result) result = args val result end def _reduce_402(val, _values, result) result = args val result end def _reduce_403(val, _values, result) result = s(:shadow, val[0].to_sym) result end # reduce 404 omitted def _reduce_405(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest result end def _reduce_406(val, _values, result) lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body self.env.unextend result end def _reduce_407(val, _values, result) result = args val result end def _reduce_408(val, _values, result) result = val[0] result = 0 if result == s(:args) result end def _reduce_409(val, _values, result) result = val[1] result end def _reduce_410(val, _values, result) result = val[1] result end def _reduce_411(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_412(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_413(val, _values, result) args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend result end def _reduce_414(val, _values, result) # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] result end def _reduce_415(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_416(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 result end def _reduce_417(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 result end def _reduce_418(val, _values, result) result = self.lexer.lineno result end def _reduce_419(val, _values, result) args = self.call_args val[2..-1] result = val[0].concat args.sexp_body result end def _reduce_420(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_421(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_422(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_423(val, _values, result) result = new_call val[0], :call, val[2], val[1] result end def _reduce_424(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_425(val, _values, result) result = new_super val[1] result end def _reduce_426(val, _values, result) result = s(:zsuper) result end def _reduce_427(val, _values, result) result = new_aref val result end def _reduce_428(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_429(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_430(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_431(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_432(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_433(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_434(val, _values, result) result = self.lexer.lineno result end def _reduce_435(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] result end # reduce 436 omitted # reduce 437 omitted def _reduce_438(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above result end def _reduce_439(val, _values, result) result = nil result end def _reduce_440(val, _values, result) result = s(:array, val[0]) result end # reduce 441 omitted # reduce 442 omitted def _reduce_443(val, _values, result) result = val[1] result end # reduce 444 omitted def _reduce_445(val, _values, result) _, body = val result = body || s(:nil) result end # reduce 446 omitted def _reduce_447(val, _values, result) result = s(:lit, val[0]) result end def _reduce_448(val, _values, result) result = s(:lit, val[0]) result end # reduce 449 omitted def _reduce_450(val, _values, result) val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] result end def _reduce_451(val, _values, result) debug20 23, val, result result end # reduce 452 omitted def _reduce_453(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_454(val, _values, result) result = val[1] result end def _reduce_455(val, _values, result) result = new_string val result end def _reduce_456(val, _values, result) result = new_xstring val[1] result end def _reduce_457(val, _values, result) result = new_regexp val result end def _reduce_458(val, _values, result) result = s(:array) result end def _reduce_459(val, _values, result) result = val[1] result end def _reduce_460(val, _values, result) result = new_word_list result end def _reduce_461(val, _values, result) result = val[0].dup << new_word_list_entry(val) result end # reduce 462 omitted def _reduce_463(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_464(val, _values, result) result = s(:array) result end def _reduce_465(val, _values, result) result = val[1] result end def _reduce_466(val, _values, result) result = new_symbol_list result end def _reduce_467(val, _values, result) result = val[0].dup << new_symbol_list_entry(val) result end def _reduce_468(val, _values, result) result = s(:array) result end def _reduce_469(val, _values, result) result = val[1] result end def _reduce_470(val, _values, result) result = s(:array) result end def _reduce_471(val, _values, result) result = val[1] result end def _reduce_472(val, _values, result) result = new_qword_list result end def _reduce_473(val, _values, result) result = val[0].dup << new_qword_list_entry(val) result end def _reduce_474(val, _values, result) result = new_qsym_list result end def _reduce_475(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) result end def _reduce_476(val, _values, result) result = s(:str, "") result end def _reduce_477(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_478(val, _values, result) result = nil result end def _reduce_479(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_480(val, _values, result) result = nil result end def _reduce_481(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_482(val, _values, result) result = new_string val result end def _reduce_483(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg # TODO: expr_value ? result end def _reduce_484(val, _values, result) lexer.lex_strterm = val[1] result = s(:evstr, val[2]) result end def _reduce_485(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store, lexer.lex_state, ] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_value result end def _reduce_486(val, _values, result) # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg lexer.lex_state = oldlex_state case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else debug20 25 raise "unknown string body: #{stmt.inspect}" end result end def _reduce_487(val, _values, result) result = s(:gvar, val[0].to_sym) result end def _reduce_488(val, _values, result) result = s(:ivar, val[0].to_sym) result end def _reduce_489(val, _values, result) result = s(:cvar, val[0].to_sym) result end # reduce 490 omitted def _reduce_491(val, _values, result) lexer.lex_state = :expr_end result = val[1].to_sym result end def _reduce_492(val, _values, result) result = val[0].to_sym result end # reduce 493 omitted # reduce 494 omitted # reduce 495 omitted # reduce 496 omitted def _reduce_497(val, _values, result) lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) when :evstr then result = s(:dsym, "", result) else debug20 26, val, result end result end # reduce 498 omitted def _reduce_499(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 500 omitted # reduce 501 omitted # reduce 502 omitted # reduce 503 omitted # reduce 504 omitted # reduce 505 omitted # reduce 506 omitted # reduce 507 omitted # reduce 508 omitted def _reduce_509(val, _values, result) result = s(:nil) result end def _reduce_510(val, _values, result) result = s(:self) result end def _reduce_511(val, _values, result) result = s(:true) result end def _reduce_512(val, _values, result) result = s(:false) result end def _reduce_513(val, _values, result) result = s(:str, self.file) result end def _reduce_514(val, _values, result) result = s(:lit, lexer.lineno) result end def _reduce_515(val, _values, result) result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end result end def _reduce_516(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_517(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_518(val, _values, result) result = self.assignable val[0] result end def _reduce_519(val, _values, result) result = self.assignable val[0] debug20 29, val, result result end def _reduce_520(val, _values, result) result = s(:nth_ref, val[0]) result end def _reduce_521(val, _values, result) result = s(:back_ref, val[0]) result end def _reduce_522(val, _values, result) result = nil result end def _reduce_523(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_524(val, _values, result) result = val[2] result end def _reduce_525(val, _values, result) yyerrok result = nil debug20 30, val, result result end def _reduce_526(val, _values, result) result = val[1] self.lexer.lex_state = :expr_beg self.lexer.command_start = true # TODO: # $$ = parser->parser_in_kwarg; # parser->parser_in_kwarg = 1; result end def _reduce_527(val, _values, result) # TODO: parser->parser_in_kwarg = $1; result = val[0] self.lexer.lex_state = :expr_beg self.lexer.command_start = true result end def _reduce_528(val, _values, result) result = args val result end def _reduce_529(val, _values, result) result = args val result end def _reduce_530(val, _values, result) result = args val result end # reduce 531 omitted def _reduce_532(val, _values, result) result = val[1] result end def _reduce_533(val, _values, result) result = nil result end def _reduce_534(val, _values, result) result = args val result end def _reduce_535(val, _values, result) result = args val result end def _reduce_536(val, _values, result) result = args val result end def _reduce_537(val, _values, result) result = args val result end def _reduce_538(val, _values, result) result = args val result end def _reduce_539(val, _values, result) result = args val result end def _reduce_540(val, _values, result) result = args val result end def _reduce_541(val, _values, result) result = args val result end def _reduce_542(val, _values, result) result = args val result end def _reduce_543(val, _values, result) result = args val result end def _reduce_544(val, _values, result) result = args val result end def _reduce_545(val, _values, result) result = args val result end def _reduce_546(val, _values, result) result = args val result end def _reduce_547(val, _values, result) result = args val result end def _reduce_548(val, _values, result) result = args val result end def _reduce_549(val, _values, result) yyerror "formal argument cannot be a constant" result end def _reduce_550(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_551(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_552(val, _values, result) yyerror "formal argument cannot be a class variable" result end # reduce 553 omitted def _reduce_554(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier result end # reduce 555 omitted # reduce 556 omitted def _reduce_557(val, _values, result) result = val[1] result end def _reduce_558(val, _values, result) case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end result end def _reduce_559(val, _values, result) list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item result end # reduce 560 omitted def _reduce_561(val, _values, result) # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) result end def _reduce_562(val, _values, result) label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) result end def _reduce_563(val, _values, result) # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) result end def _reduce_564(val, _values, result) label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) result end # reduce 565 omitted def _reduce_566(val, _values, result) list, _, item = val result = list << item.last result end # reduce 567 omitted def _reduce_568(val, _values, result) result = args val result end # reduce 569 omitted # reduce 570 omitted def _reduce_571(val, _values, result) result = :"**#{val[1]}" result end def _reduce_572(val, _values, result) result = :"**" result end def _reduce_573(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_574(val, _values, result) result = self.assignable val[0], val[2] result end def _reduce_575(val, _values, result) result = s(:block, val[0]) result end def _reduce_576(val, _values, result) result = val[0] result << val[2] result end def _reduce_577(val, _values, result) result = s(:block, val[0]) result end def _reduce_578(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 579 omitted # reduce 580 omitted def _reduce_581(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" result end def _reduce_582(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 583 omitted # reduce 584 omitted def _reduce_585(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym result end def _reduce_586(val, _values, result) result = val[1] result end def _reduce_587(val, _values, result) result = nil result end # reduce 588 omitted def _reduce_589(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_590(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit result end def _reduce_591(val, _values, result) result = s(:array) result end def _reduce_592(val, _values, result) result = val[0] result end # reduce 593 omitted def _reduce_594(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash result end def _reduce_595(val, _values, result) result = s(:array, val[0], val[2]) result end def _reduce_596(val, _values, result) result = s(:array, s(:lit, val[0][0].to_sym), val.last) result end def _reduce_597(val, _values, result) _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value) result end def _reduce_598(val, _values, result) raise "not yet: #{val.inspect}" # result = s(:array, s(:lit, val[1].to_sym), val[1]) result end def _reduce_599(val, _values, result) result = s(:array, s(:kwsplat, val[1])) result end # reduce 600 omitted # reduce 601 omitted # reduce 602 omitted # reduce 603 omitted # reduce 604 omitted # reduce 605 omitted # reduce 606 omitted # reduce 607 omitted # reduce 608 omitted # reduce 609 omitted # reduce 610 omitted # reduce 611 omitted # reduce 612 omitted # reduce 613 omitted # reduce 614 omitted # reduce 615 omitted # reduce 616 omitted # reduce 617 omitted # reduce 618 omitted # reduce 619 omitted # reduce 620 omitted # reduce 621 omitted # reduce 622 omitted def _reduce_623(val, _values, result) yyerrok result end # reduce 624 omitted # reduce 625 omitted def _reduce_626(val, _values, result) yyerrok result end def _reduce_627(val, _values, result) result = nil; result end def _reduce_none(val, _values, result) val[0] end end # class Ruby24Parser ruby_parser-3.11.0/lib/rp_stringscanner.rb0000444000004100000410000000237113277753330020650 0ustar www-datawww-datarequire "strscan" class RPStringScanner < StringScanner # if ENV['TALLY'] then # alias :old_getch :getch # def getch # warn({:getch => caller[0]}.inspect) # old_getch # end # end if "".respond_to? :encoding then if "".respond_to? :byteslice then def string_to_pos string.byteslice(0, pos) end else def string_to_pos string.bytes.first(pos).pack("c*").force_encoding(string.encoding) end end def charpos string_to_pos.length end else alias :charpos :pos def string_to_pos string[0..pos] end end def unread_many str # TODO: remove this entirely - we should not need it warn({:unread_many => caller[0]}.inspect) if ENV['TALLY'] begin string[charpos, 0] = str rescue IndexError # HACK -- this is a bandaid on a dirty rag on an open festering wound end end if ENV['DEBUG'] then alias :old_getch :getch def getch c = self.old_getch p :getch => [c, caller.first] c end alias :old_scan :scan def scan re s = old_scan re where = caller[1].split(/:/).first(2).join(":") d :scan => [s, where] if s s end end def d o $stderr.puts o.inspect end end ruby_parser-3.11.0/lib/ruby25_parser.rb0000644000004100000410000077413413277753330020012 0ustar www-datawww-data# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.14 # from Racc grammer file "". # require 'racc/parser.rb' class Ruby25Parser < RubyParser::Parser require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ##### State transition tables begin ### clist = [ '-607,272,530,-101,-104,-98,272,-607,-607,-607,757,272,222,-607,-607', '-616,-607,94,95,-105,-84,83,223,-104,-507,-607,666,630,585,84,748,-507', '627,116,749,-70,-607,-607,115,-607,-607,-607,-607,-607,-96,-100,116', '826,223,591,223,115,-91,-92,-94,-103,-100,457,-99,-105,665,856,826,585', '-103,585,-98,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607', '-607,-607,-607,737,-604,-607,-607,-607,709,650,271,-604,629,-607,-99', '271,-607,626,96,97,271,-607,505,-607,-264,-607,-607,-607,-607,-607,-607', '-607,-89,-607,-607,-607,-106,503,756,-101,-104,-91,-92,-94,-101,-104', '-96,-504,-607,-607,-95,-93,-106,-607,-504,-504,-504,116,-102,-504,-504', '-504,115,-504,116,-607,-102,940,-105,115,585,-504,-91,-504,-504,-504', '-91,-92,-94,-91,-92,-94,-94,-504,-504,-90,-504,-504,-504,-504,-504,585', '-100,-263,-91,-92,-94,-100,-93,116,-103,116,-98,116,115,-103,115,-98', '115,-101,-106,500,-519,708,-504,-504,-504,-504,-504,-504,-504,-504,-504', '-504,-504,-504,-504,-504,-99,737,-504,-504,-504,-99,-504,-504,-603,737', '-504,887,-102,-504,-504,272,-504,791,-504,792,-504,772,-504,-504,-504', '-504,-504,-504,-504,771,-504,770,-504,219,220,888,-603,-93,-106,94,95', '-99,274,-106,-102,-504,-504,-504,-504,-102,-504,-601,-504,265,-105,-518', '116,-507,530,-105,266,115,-504,-504,-507,-507,-507,219,220,-507,-507', '-507,-93,-507,-101,-93,-103,116,-603,666,-418,-507,115,-507,-507,-507', '-92,-97,219,220,-93,490,-100,-507,-507,222,-507,-507,-507,-507,-507', '116,271,116,-507,890,115,714,115,116,611,-507,-98,665,115,-105,-601', '-93,96,97,-507,666,893,223,-507,-507,-507,-507,-507,-507,-507,-507,-507', '-507,-507,-507,-507,-507,-601,-518,-507,-507,-507,666,-507,-507,542', '223,-507,544,1010,-507,-507,611,-507,665,-507,223,-507,-600,-507,-507', '-507,-507,-507,-507,-507,265,-507,-507,-507,613,612,609,266,215,-519', '665,223,856,826,-89,1017,-507,-507,-507,-507,611,-507,116,-507,1015', '681,243,115,-607,-98,896,-510,898,-507,-507,-607,-607,-607,-510,570', '-607,-607,-607,542,-607,-504,541,613,612,631,573,-90,-504,-607,-607', '-607,-607,-600,240,219,220,-504,242,241,-607,-607,-99,-607,-607,-607', '-607,-607,565,216,562,561,560,542,563,-600,544,613,612,581,580,565,777', '562,561,560,767,563,900,-607,223,-607,-607,-607,-607,-607,-607,-607', '-607,-607,-607,-607,-607,-607,-607,217,-504,-607,-607,-607,215,793,-607', '574,902,-607,903,454,-607,-607,611,-607,459,-607,-91,-607,455,-607,-607', '-607,-607,-607,-607,-607,570,-607,-607,-607,542,-100,458,544,-607,611', '456,573,986,-97,611,-607,-607,-607,-607,-607,-603,-607,-289,-607,-607', '852,696,116,-106,-289,-289,-289,115,-607,-102,-289,-289,911,-289,-337', '-262,216,-607,915,581,580,-337,613,612,243,-290,219,220,215,917,-337', '769,-290,-289,-289,967,-289,-289,-289,-289,-289,-290,-289,918,753,613', '612,624,-607,-289,613,612,619,574,-604,644,240,643,-289,611,242,241', '616,223,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289', '-289,-289,215,-337,-289,-289,-289,714,649,594,921,116,-289,923,-290', '-289,115,216,592,925,-289,-94,-289,-92,-289,-289,-289,-289,-289,-289', '-289,-289,-289,215,-289,-290,-103,927,-101,927,523,223,-290,611,613', '612,-289,-289,-289,521,-95,-290,-289,-289,-289,-289,219,220,-289,-289', '-289,-514,-289,-517,-289,-104,933,216,-514,-509,-517,-513,-289,-289', '-289,409,-509,-516,-513,-517,411,410,-289,-289,-516,-289,-289,-289,-289', '-289,-504,740,-512,-516,-511,215,215,-504,216,-512,-290,-511,967,214', '613,612,614,581,580,219,220,753,212,-289,-289,-289,-289,-289,-289,-289', '-289,-289,-289,-289,-289,-289,-289,935,-517,-289,-289,-289,-515,794', '-289,591,937,-289,733,-515,-289,-289,-516,-289,611,-289,412,-289,407', '-289,-289,-289,-289,-289,-289,-289,391,-289,116,-289,216,216,731,115', '565,223,562,561,560,570,563,-289,-289,-289,-289,-289,388,-289,-289,-289', '573,385,947,-604,-281,948,223,-289,951,-289,-104,-281,-281,-281,-265', '730,-281,-281,-281,382,-281,215,568,729,618,613,612,609,533,721,-281', '-281,-281,581,580,215,719,455,717,961,-281,-281,751,-281,-281,-281,-281', '-281,358,715,968,753,969,714,-280,971,-289,972,711,223,964,-280,562', '561,560,505,563,574,705,622,-280,-281,-281,-281,-281,-281,-281,-281', '-281,-281,-281,-281,-281,-281,-281,702,216,-281,-281,-281,701,988,-281', '322,990,-281,991,625,-281,-281,216,-281,628,-281,995,-281,696,-281,-281', '-281,-281,-281,-281,-281,714,-281,1000,-281,565,-280,562,561,560,570', '563,119,120,121,122,123,-281,-281,-281,-281,573,-281,-426,-281,119,120', '121,122,123,-426,-426,-426,1002,-281,-426,-426,-426,565,-426,562,561', '560,568,563,1004,1006,1006,-426,-426,-426,535,879,880,581,580,881,110', '111,-426,-426,223,-426,-426,-426,-426,-426,565,1013,562,561,560,321', '563,262,635,723,1018,565,685,562,561,560,1019,563,726,927,927,574,927', '-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426', '1024,723,-426,-426,-426,-84,988,-426,223,274,-426,218,723,-426,-426', '-262,-426,637,-426,223,-426,726,-426,-426,-426,-426,-426,-426,-426,243', '-426,-426,-426,641,223,565,-604,562,561,560,-603,563,701,223,-609,-426', '-426,642,-426,243,-426,-609,-609,-609,211,243,-609,-609,-609,243,-609', '240,-426,243,988,242,241,238,239,-609,-609,-609,-609,723,1047,257,258', '1048,1049,1050,-609,-609,932,-609,-609,-609,-609,-609,1006,1006,1006', '240,223,246,210,242,241,238,239,209,927,244,565,245,562,561,560,988', '563,243,112,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609', '-609,-609,505,274,-609,-609,-609,539,243,-609,503,696,-609,223,531,-609', '-609,723,-609,653,-609,274,-609,527,-609,-609,-609,-609,-609,-609,-609', '1006,-609,-609,-609,565,274,562,561,560,570,563,119,120,121,122,123', '-609,-609,-609,-609,573,-609,-297,-609,119,120,121,122,123,-297,-297', '-297,696,-609,-297,-297,-297,262,-297,243,796,565,568,562,561,560,243', '563,-297,-297,274,826,3,581,580,257,258,223,-297,-297,223,-297,-297', '-297,-297,-297,964,277,562,561,560,240,563,246,223,242,241,238,239,723', '223,244,565,245,562,561,560,574,563,-297,-297,-297,-297,-297,-297,-297', '-297,-297,-297,-297,-297,-297,-297,545,243,-297,-297,-297,490,850,-297', '223,277,-297,826,860,-297,-297,524,-297,723,-297,223,-297,490,-297,-297', '-297,-297,-297,-297,-297,591,-297,401,-297,240,517,516,595,242,241,238', '239,778,596,223,-608,-297,-297,-69,-297,,-297,-608,-608,-608,,,-608', '-608,-608,243,-608,565,-297,562,561,560,,563,,-608,-608,-608,-608,,', '257,258,,,,-608,-608,,-608,-608,-608,-608,-608,,,,240,,246,,242,241', '238,239,723,,244,,245,,,,,,,,-608,-608,-608,-608,-608,-608,-608,-608', '-608,-608,-608,-608,-608,-608,,,-608,-608,-608,,,-608,,,-608,,,-608', '-608,,-608,,-608,,-608,,-608,-608,-608,-608,-608,-608,-608,,-608,-608', '-608,565,,562,561,560,570,563,,,,,,-608,-608,-608,-608,573,-608,-627', '-608,,,,,,-627,-627,-627,,-608,-627,-627,-627,,-627,243,,,568,,,,,-627', '-627,-627,,,,581,580,257,258,,-627,-627,,-627,-627,-627,-627,-627,,', ',,,240,,246,,242,241,238,239,,,244,,245,,,,574,,-627,-627,-627,-627', '-627,-627,-627,-627,-627,-627,-627,-627,-627,-627,,,-627,-627,-627,', ',-627,,274,-627,,,-627,-627,,-627,,-627,,-627,,-627,-627,-627,-627,-627', '-627,-627,,-627,-627,-627,,,,,,,,,,,,,-627,-627,,-627,,-627,297,72,73', '74,12,60,,,,66,67,-627,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,654,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', ',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,-239,,,65', ',,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,654,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', '251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240', ',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', '92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70', ',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,638,11', '48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243', '247,252,253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36', ',,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91', '83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74', '12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94', '95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,', '257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248', '244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96', '97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255', '256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241', '238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65', ',,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', '251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240', ',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', '92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70', ',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48', ',13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247', '252,253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61', '62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83', '85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', '258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', '23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', '297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', ',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', '88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', '259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', '47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', ',261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', '253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62', ',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', '86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60', ',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', ',22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', '258,,43,,,299,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', '23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', '297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', ',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', '88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', '259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', '47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', ',261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', '253,254,249,251,259,260,255,256,,236,237,,,257,258,,43,,,36,,,61,62', ',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', '86,87,89,,,,84,92,223,261,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,243,247,252,253,254,249,251,259,260,255,256,,236,237,,,257', '258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', '23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81,88,90,,,96,97', '297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259,260,255,256', ',236,237,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,261,,,,,65,,,81', '88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251', ',,255,256,,,,,,257,258,,43,,,299,,,61,62,,,63,,38,240,,246,47,242,241', '238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249', '251,259,260,255,256,,-628,-628,,,257,258,,43,,,36,,,61,62,,,63,,38,240', ',246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,247,252', '253,254,249,251,259,260,255,256,,-628,-628,,,257,258,,43,,,36,,,61,62', ',,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,', '66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', ',,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,,,,257,258,,43,', ',36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244,23,245', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,8,72,73,74', '12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,22,,,,,,11,48,10,13,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,,,,257', '258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250,248,244', '23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297', '72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628,-628,,,', ',,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239,250', '248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,243,-628,-628,-628,-628,249,251,,,-628', '-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238', '239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', ',,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,243,247,252,253,254,249,251,259', ',255,256,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241', '238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,243,-628,-628,-628,-628', '249,251,,,-628,-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246', '47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,8,72,73,74,12,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,-628,-628', '-628,-628,249,251,,,-628,-628,,,,,,257,258,,43,,,36,,,61,62,,,63,,38', '240,,246,47,242,241,238,239,250,248,244,23,245,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11', '48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243', ',,,,,,,,,,,,,,,257,258,,43,,,299,,243,61,62,,,63,,38,240,,246,47,242', '241,238,239,257,258,,23,,,,,91,83,85,86,87,89,,,240,84,92,,242,241,238', '239,,65,,,81,88,90,,,96,97,297,72,73,74,12,60,,,,66,67,,,,70,,68,69', '71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,243,,,,,,,,,', ',,,,,,257,258,,43,,,36,,,61,62,,,63,,38,240,,246,47,242,241,238,239', ',,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,297', '72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,', '47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290', '102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,', '63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', ',291,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', ',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', ',228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87', '89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,', ',70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,', '48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,', ',,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,', ',,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94', '95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47', ',,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,', ',96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290', '102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,', '63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', ',291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,', ',304,,,61,62,,,63,,303,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,', ',,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308', ',,234,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,320', ',,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,678,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,', ',,,978,,,234,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,,,47,,,,,', ',,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,116,,,,,115,65,,,81,88,90,,', '96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,352,,,36,,,61,62,,,63,', '38,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,', '96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,905,,,234,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', '290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62', ',,63,,,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65', ',291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,', '36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,401,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', ',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,417,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', ',228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87', '89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,', ',70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,', '48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,', ',,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,', ',,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,417,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', ',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,223,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', ',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,', '235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,,,47,,,,,,,,233', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', '105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', ',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,417', ',,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,535,,61,62', ',,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,', ',32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', ',63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,', '310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99', '101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61', '62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', ',228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,', ',84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,', '68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,', ',,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46', '44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,284,,47,,,,,,,,233,', ',,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', '105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,284', ',47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88', '90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,', '310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99', '101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61', '62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,597,59', '100,99,598,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,599,,,234,', ',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,597,59', '100,99,598,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,599,,,234,', ',61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,775,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,', ',,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,', '65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', '99,101,290,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288', ',,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,287', '85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,', ',66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,,,47,,,,,', ',,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', '47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286', ',284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', ',,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,304,,,61', '62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88', '90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,', '32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99', '101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62', ',,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,401,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', '76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,284,,47,,,,,,,,233,,,,,91,287', '85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60,,', ',66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,678,,284,,47,,', ',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', ',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', ',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', '76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,312,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,905,,,234', ',,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,', ',81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', '106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', '105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', ',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', '47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', ',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', ',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', '76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', '106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103', '105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,', ',,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,', '47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311', '317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,', ',,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310', '311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,', ',63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,', ',,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,', '61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75', '76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,', ',234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,290,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,,,,,,,233,,,,,91', '287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105', '106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,', ',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286', ',284,,47,,,,,,,,233,,,,,91,287,85,86,87,89,,,,84,288,223,,,,,,65,,291', '81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76', ',,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,235,,,,,,,48,,,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234', ',,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92,,,,,', ',65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315', '75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228', ',,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,314', '315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,314,315,75,76,,,,,,310,311,317,104,103,105,106,,,235,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,,,,,,,,233,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,', ',,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,', '22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,', '45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61,62,,,63,,38,,,,47,,,,,,,,23', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,235,,,,,,,48,,,108,107,109,98,59,100,99,101,290,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,286,,284,,47,,', ',,,,,233,,,,,91,287,85,86,87,89,,,,84,288,,,,,,,65,,291,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,228,,,234,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,314,315,75,76,,,,,,310,311,317', '104,103,105,106,,,235,,,,,,,312,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,,,318,,,,,,,,,,,,,,,,,,,,308,,,234,,,61,62,,,63,,,,', ',,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,519,,,65,,,81,88,90,,,96', '97,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201,205,206', '185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190', ',,,,,171,178,169,170,166,167,168,127,129,398,397,128,,399,,,,,,,161', '162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,', ',,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,', ',,,,,,,,,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', '180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', '199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', ',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', '150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', ',,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203', '204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202', '197,367,366,368,365,172,191,190,,,,,,171,178,169,170,362,363,364,360', '129,100,99,361,,102,,,,,,,161,162,,157,139,140,141,148,145,147,,,142', '143,,,,163,164,149,150,,,,,,374,,,,,,,,154,153,,138,160,156,155,151', '152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187,177,200', '173,193,183,182,203,204,198,181,180,175,201,205,206,185,174,188,192', '194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,,171,178', '169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148', '145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156', '155,151,152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187', '177,200,173,193,183,182,203,204,198,181,180,175,201,205,206,185,174', '188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191,190,,,,,', '171,178,169,170,166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138', '160,156,155,151,152,146,144,136,159,137,,,165,91,,,,,,,,,,92,,,,,,,', ',158,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201,205', '206,185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172,191', '190,,,,,,171,178,169,170,166,167,168,127,129,126,,128,,,,,,,,,161,162', ',157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,', ',,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,91,,,', ',,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', '180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', '199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', ',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', '150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', ',,165,91,,,,-627,,,,,,92,-627,-627,-627,,,-627,-627,-627,158,-627,,', ',,,,,,-627,-627,,,,,,,,,,-627,-627,,-627,-627,-627,-627,-627,,,,,,,', '488,431,,,489,,,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143', '-627,,,163,164,149,150,-627,,,,,274,-627,,,,,,,154,153,,138,160,156', '155,151,152,146,144,136,159,137,-627,-627,165,,,,,1042,438,,,1043,,', '-627,,,,,-627,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', '136,159,137,,,165,,,,,656,431,,,657,,,,,,,,,161,162,158,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', ',138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,1040,431,,,1041', ',,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164', '149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', '159,137,,,165,,,,,658,438,,,659,,,,,,,,,161,162,158,157,139,140,141', '148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153,,138', '160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560,570,563', '565,,562,561,560,570,563,,,573,,,,,158,,573,,,,,,,,,,,,,,,568,,,,,,', '568,,1012,438,581,580,1011,,,578,577,581,580,,,161,162,,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,574,,,274,,,,574,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,689,431,', ',690,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', '136,159,137,,,165,,,,,692,438,,,693,,,,,,,,,161,162,158,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', ',138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560,570', '563,,,,,,,,,,573,,,,,158,,,,,,,,,,,,,,,,,568,761,656,431,,,657,,,578', '577,581,580,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,,,,274,,,,574,,,,154,153,,138,160,156,155,151,152,146', '144,136,159,137,,,165,,,,,658,438,,,659,,,,,,,,,161,162,158,157,139', '140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560', '570,563,565,,562,561,560,570,563,,,573,,,,,158,,573,565,,562,561,560', '570,563,565,,562,561,560,570,563,568,,573,,,,,568,,573,,581,580,,,,', ',581,580,,,,565,568,562,561,560,570,563,,568,,,,581,580,,,573,578,577', '581,580,565,574,562,561,560,570,563,565,574,562,561,560,570,563,,,573', '568,,,,,,573,,574,578,577,581,580,,565,574,562,561,560,570,563,568,', ',,,,,568,,573,,581,580,,,,578,577,581,580,,,,,574,,,,,,,568,,,,,,,,', '578,577,581,580,,574,,427,431,,,428,574,,,,,,,,161,162,,157,139,140', '141,148,145,147,,,142,143,,,574,163,164,149,150,,,,,,274,,,,,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,434,438,', ',433,,,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144', '136,159,137,,,165,,,,,743,431,,,744,,,,,,,,,161,162,158,157,139,140', '141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154,153', ',138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,745,438,,,746', ',,,,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164', '149,150,,,,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', '159,137,,565,165,562,561,560,570,563,565,,562,561,560,570,563,,,573', ',,,,158,,573,,,,,565,,562,561,560,570,563,,,,568,761,,,,,573,568,,578', '577,581,580,,,,578,577,581,580,,,,,,,,,568,,,,,,,,,488,431,581,580,489', ',,,574,,,,,161,162,574,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,574,,,274,,,,,,,,154,153,,138,160,156,155,151,152,146', '144,136,159,137,,,165,,,,,864,438,,,865,,,,,,,,,161,162,158,157,139', '140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,274,,,,,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,565,165,562,561,560', '570,563,565,,562,561,560,570,563,,,573,,,,,158,,573,565,,562,561,560', '570,563,,,,,,,,568,551,573,,,,,568,,578,577,581,580,,,,578,577,581,580', ',,,565,568,562,561,560,570,563,,,,578,577,581,580,,,573,,,,,,574,,,', ',,,574,,,,,,,,,568,,,,,,,,574,578,577,581,580,,,,,,,,,,,,,,,,,,,,,,', ',,223,,,,,,,,574' ] racc_action_table = arr = ::Array.new(26642, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '434,313,322,1040,1043,349,64,434,434,434,603,669,22,434,434,61,434,318', '318,595,684,80,290,746,361,434,670,392,861,80,599,361,389,757,599,684', '434,434,757,434,434,434,434,434,322,862,871,993,22,993,61,871,821,689', '690,744,1055,229,350,322,670,732,732,914,1041,936,975,434,434,434,434', '434,434,434,434,434,434,434,434,434,434,587,1043,434,434,434,550,434', '313,746,392,434,976,64,434,389,318,318,669,434,285,434,774,434,434,434', '434,434,434,434,349,434,434,434,229,282,603,1040,1043,821,689,690,1040', '1043,595,98,434,434,746,434,979,434,98,98,98,603,1042,98,98,98,603,98', '861,434,434,861,1018,861,342,98,862,98,98,98,821,689,690,821,689,690', '744,98,98,350,98,98,98,98,98,343,1055,636,821,689,690,1055,692,914,1041', '936,975,587,914,1041,936,975,587,743,353,281,227,550,98,98,98,98,98', '98,98,98,98,98,98,98,98,98,976,588,98,98,98,976,98,98,1042,863,98,779', '745,98,98,29,98,656,98,657,98,632,98,98,98,98,98,98,98,630,98,627,98', '764,764,795,692,692,979,44,44,227,270,979,1042,98,98,98,98,1042,98,598', '98,370,1018,226,342,101,456,1018,370,342,98,98,101,101,101,451,451,101', '101,101,692,101,656,692,657,343,745,486,29,101,343,101,101,101,743,353', '699,699,692,267,795,101,101,235,101,101,101,101,101,588,29,945,598,797', '588,798,945,863,507,598,226,486,863,456,598,745,44,44,598,494,800,764', '101,101,101,101,101,101,101,101,101,101,101,101,101,101,598,41,101,101', '101,495,101,101,704,962,101,704,962,101,101,394,101,494,101,451,101', '597,101,101,101,101,101,101,101,27,101,598,101,507,507,507,27,977,42', '495,699,1026,1026,41,977,101,101,101,101,620,101,762,101,977,507,462', '762,658,41,801,367,802,101,101,658,658,658,367,711,658,658,658,334,658', '597,334,394,394,394,711,42,597,658,658,658,658,597,462,341,341,597,462', '462,658,658,42,658,658,658,658,658,932,977,932,932,932,335,932,597,335', '620,620,711,711,726,639,726,726,726,620,726,804,864,805,658,658,658', '658,658,658,658,658,658,658,658,658,658,658,18,597,658,658,658,225,658', '658,711,806,658,807,225,658,658,623,658,231,658,639,658,225,658,658', '658,658,658,658,658,890,658,658,658,548,639,230,548,864,386,228,890', '932,18,383,864,658,658,658,658,864,658,433,658,864,726,820,294,18,433', '433,433,294,658,658,433,433,824,433,49,827,225,864,828,890,890,49,623', '623,463,524,538,538,966,833,49,623,524,433,433,966,433,433,433,433,433', '524,865,834,966,386,386,386,864,865,383,383,383,890,865,428,463,427', '865,380,463,463,380,835,433,433,433,433,433,433,433,433,433,433,433', '433,433,433,351,49,433,433,433,836,433,351,840,346,433,841,524,433,346', '966,351,843,433,428,433,427,433,433,433,433,433,433,433,865,433,307', '433,749,428,844,427,846,307,849,749,378,380,380,659,433,433,307,433', '749,433,659,659,659,758,758,659,659,659,362,659,306,433,433,851,351', '362,366,306,363,659,659,659,126,366,305,363,306,126,126,659,659,305', '659,659,659,659,659,360,590,365,305,368,904,17,360,307,365,749,368,904', '17,378,378,378,714,714,20,20,904,17,659,659,659,659,659,659,659,659', '659,659,659,659,659,659,854,306,659,659,659,364,659,659,589,857,659', '584,364,659,659,305,659,376,659,207,659,124,659,659,659,659,659,659', '659,90,659,5,659,904,17,582,5,1050,867,1050,1050,1050,1050,1050,693', '659,659,659,659,89,659,693,659,1050,88,872,693,59,873,874,693,883,659', '659,59,59,59,884,579,59,59,59,87,59,324,1050,575,382,376,376,376,324', '567,59,59,59,1050,1050,601,558,324,557,901,59,59,601,59,59,59,59,59', '72,556,905,601,906,554,309,908,693,909,553,48,1010,309,1010,1010,1010', '549,1010,1050,546,385,309,59,59,59,59,59,59,59,59,59,59,59,59,59,59', '537,324,59,59,59,536,934,59,43,938,59,939,388,59,59,601,59,391,59,944', '59,528,59,59,59,59,59,59,59,952,59,955,59,1019,309,1019,1019,1019,1019', '1019,9,9,9,9,9,59,59,59,59,1019,59,30,59,296,296,296,296,296,30,30,30', '956,59,30,30,30,568,30,568,568,568,1019,568,957,958,960,30,30,30,525', '765,765,1019,1019,765,765,765,30,30,520,30,30,30,30,30,1024,970,1024', '1024,1024,40,1024,25,413,568,978,723,518,723,723,723,981,723,568,982', '983,1019,984,30,30,30,30,30,30,30,30,30,30,30,30,30,30,985,1024,30,30', '30,515,987,30,514,30,30,19,723,30,30,416,30,418,30,422,30,723,30,30', '30,30,30,30,30,481,30,30,30,425,497,850,1011,850,850,850,1012,850,1014', '496,439,30,30,426,30,467,30,439,439,439,16,466,439,439,439,472,439,481', '30,465,1025,481,481,481,481,439,439,439,439,850,1030,472,472,1031,1032', '1033,439,439,850,439,439,439,439,439,1034,1035,1036,472,1039,472,15', '472,472,472,472,13,1044,472,988,472,988,988,988,1045,988,464,3,439,439', '439,439,439,439,439,439,439,439,439,439,439,439,677,435,439,439,439', '332,326,439,675,686,439,688,323,439,439,988,439,443,439,691,439,319', '439,439,439,439,439,439,439,1057,439,439,439,1006,694,1006,1006,1006', '1006,1006,683,683,683,683,683,439,439,439,439,1006,439,31,439,513,513', '513,513,513,31,31,31,695,439,31,31,31,668,31,473,662,986,1006,986,986', '986,698,986,31,31,317,700,1,1006,1006,473,473,703,31,31,312,31,31,31', '31,31,902,311,902,902,902,473,902,473,710,473,473,473,473,986,660,473', '852,473,852,852,852,1006,852,31,31,31,31,31,31,31,31,31,31,31,31,31', '31,336,482,31,31,31,651,725,31,727,31,31,734,739,31,31,308,31,852,31', '742,31,645,31,31,31,31,31,31,31,347,31,348,31,482,302,301,352,482,482', '482,482,640,354,300,438,31,31,298,31,,31,438,438,438,,,438,438,438,474', '438,933,31,933,933,933,,933,,438,438,438,438,,,474,474,,,,438,438,,438', '438,438,438,438,,,,474,,474,,474,474,474,474,933,,474,,474,,,,,,,,438', '438,438,438,438,438,438,438,438,438,438,438,438,438,,,438,438,438,,', '438,,,438,,,438,438,,438,,438,,438,,438,438,438,438,438,438,438,,438', '438,438,1004,,1004,1004,1004,1004,1004,,,,,,438,438,438,438,1004,438', '429,438,,,,,,429,429,429,,438,429,429,429,,429,475,,,1004,,,,,429,429', '429,,,,1004,1004,475,475,,429,429,,429,429,429,429,429,,,,,,475,,475', ',475,475,475,475,,,475,,475,,,,1004,,429,429,429,429,429,429,429,429', '429,429,429,429,429,429,,,429,429,429,,,429,,429,429,,,429,429,,429', ',429,,429,,429,429,429,429,429,429,429,,429,429,429,,,,,,,,,,,,,429', '429,,429,,429,974,974,974,974,974,974,,,,974,974,429,,,974,,974,974', '974,974,974,974,974,,,,,,974,974,974,974,974,974,974,,,974,,,,,446,974', '974,,974,974,974,974,974,974,974,974,974,,974,974,974,,974,974,,974', '974,974,446,446,446,446,446,446,446,446,446,446,446,,446,446,,,446,446', ',974,,,974,,,974,974,,,974,,974,446,,446,974,446,446,446,446,446,446', '446,974,446,,,,974,974,974,974,974,974,,,,974,974,,446,,446,,,974,,', '974,974,974,,,974,974,234,234,234,234,234,234,,,,234,234,,,,234,,234', '234,234,234,234,234,234,,,,,,234,234,234,234,234,234,234,,,234,,,,,661', '234,234,,234,234,234,234,234,234,234,234,234,,234,234,234,,234,234,', '234,234,234,661,661,661,661,661,661,661,661,661,661,661,,661,661,,,661', '661,,234,,,234,,,234,234,,,234,,234,661,,661,234,661,661,661,661,661', '661,661,234,661,,,,234,234,234,234,234,234,,,,234,234,,661,,,,,234,', ',234,234,234,,,234,234,811,811,811,811,811,811,,,,811,811,,,,811,,811', '811,811,811,811,811,811,,,,,,811,811,811,811,811,811,811,,,811,,,,,421', '811,811,,811,811,811,811,811,811,811,811,811,,811,811,811,,811,811,', '811,811,811,421,421,421,421,421,421,421,421,421,421,421,,421,421,,,421', '421,,811,,,811,,,811,811,,,811,,811,421,,421,811,421,421,421,421,421', '421,421,811,421,,,,811,811,811,811,811,811,,,,811,811,,421,,,,,811,', ',811,811,811,,,811,811,209,209,209,209,209,209,,,,209,209,,,,209,,209', '209,209,209,209,209,209,,,,,,209,209,209,209,209,209,209,,,209,,,,,', '209,209,,209,209,209,209,209,209,209,209,209,,209,209,209,,209,209,', '209,209,209,776,776,776,776,776,776,776,776,776,776,776,,776,776,,,776', '776,,209,,,209,,,209,209,,,209,,209,776,,776,209,776,776,776,776,776', '776,776,209,776,,,,209,209,209,209,209,209,,,,209,209,,776,,,,,209,', ',209,209,209,,,209,209,941,941,941,941,941,941,,,,941,941,,,,941,,941', '941,941,941,941,941,941,,,,,,941,941,941,941,941,941,941,,,941,,,,,', '941,941,,941,941,941,941,941,941,941,941,941,,941,941,941,,941,941,', '941,941,941,788,788,788,788,788,788,788,788,788,788,788,,788,788,,,788', '788,,941,,,941,,,941,941,,,941,,941,788,,788,941,788,788,788,788,788', '788,788,941,788,,,,941,941,941,941,941,941,,,,941,941,,788,,,,,941,', ',941,941,941,,,941,941,709,709,709,709,709,709,,,,709,709,,,,709,,709', '709,709,709,709,709,709,,,,,,709,709,709,709,709,709,709,,,709,,,,,', '709,709,,709,709,709,709,709,709,709,709,709,,709,709,709,,709,709,', '709,709,709,781,781,781,781,781,781,781,781,781,781,781,,781,781,,,781', '781,,709,,,709,,,709,709,,,709,,709,781,,781,709,781,781,781,781,781', '781,781,709,781,,,,709,709,709,709,709,709,,,,709,709,,781,,,,,709,', ',709,709,709,,,709,709,859,859,859,859,859,859,,,,859,859,,,,859,,859', '859,859,859,859,859,859,,,,,,859,859,859,859,859,859,859,,,859,,,,,', '859,859,,859,859,859,859,859,859,859,859,859,,859,859,859,,859,859,', '859,859,859,889,889,889,889,889,889,889,889,889,889,889,,889,889,,,889', '889,,859,,,859,,,859,859,,,859,,859,889,,889,859,889,889,889,889,889', '889,889,859,889,,,,859,859,859,859,859,859,,,,859,859,,889,,,,,859,', ',859,859,859,,,859,859,858,858,858,858,858,858,,,,858,858,,,,858,,858', '858,858,858,858,858,858,,,,,,858,858,858,858,858,858,858,,,858,,,,,', '858,858,,858,858,858,858,858,858,858,858,858,,858,858,858,,858,858,', '858,858,858,24,24,24,24,24,24,24,24,24,24,24,,24,24,,,24,24,,858,,,858', ',,858,858,,,858,,858,24,,24,858,24,24,24,24,24,24,24,858,24,,,,858,858', '858,858,858,858,,,,858,858,,24,,,,,858,,,858,858,858,,,858,858,998,998', '998,998,998,998,,,,998,998,,,,998,,998,998,998,998,998,998,998,,,,,', '998,998,998,998,998,998,998,,,998,,,,,,998,998,,998,998,998,998,998', '998,998,998,998,,998,998,998,,998,998,,998,998,998,697,697,697,697,697', '697,697,697,697,697,697,,697,697,,,697,697,,998,,,998,,,998,998,,,998', ',998,697,,697,998,697,697,697,697,697,697,697,998,697,,,,998,998,998', '998,998,998,,,,998,998,,697,,,,,998,,,998,998,998,,,998,998,997,997', '997,997,997,997,,,,997,997,,,,997,,997,997,997,997,997,997,997,,,,,', '997,997,997,997,997,997,997,,,997,,,,,,997,997,,997,997,997,997,997', '997,997,997,997,,997,997,997,,997,997,,997,997,997,886,886,886,886,886', '886,886,886,886,886,886,,886,886,,,886,886,,997,,,997,,,997,997,,,997', ',997,886,,886,997,886,886,886,886,886,886,886,997,886,,,,997,997,997', '997,997,997,,,,997,997,,886,,,,,997,,,997,997,997,,,997,997,994,994', '994,994,994,994,,,,994,994,,,,994,,994,994,994,994,994,994,994,,,,,', '994,994,994,994,994,994,994,,,994,,,,,,994,994,,994,994,994,994,994', '994,994,994,994,,994,994,994,,994,994,,994,994,994,783,783,783,783,783', '783,783,783,783,783,783,,783,783,,,783,783,,994,,,994,,,994,994,,,994', ',994,783,,783,994,783,783,783,783,783,783,783,994,783,,,,994,994,994', '994,994,994,,,,994,994,,783,,,,,994,,,994,994,994,,,994,994,304,304', '304,304,304,304,,,,304,304,,,,304,,304,304,304,304,304,304,304,,,,,', '304,304,304,304,304,304,304,,,304,,,,,,304,304,,304,304,304,304,304', '304,304,304,304,,304,304,304,,304,304,,304,304,304,441,441,441,441,441', '441,441,441,441,441,441,,441,441,,,441,441,,304,,,304,,,304,304,,,304', ',304,441,,441,304,441,441,441,441,441,441,441,304,441,,,,304,304,304', '304,304,304,,,,304,304,,441,,,,,304,,,304,304,304,,,304,304,911,911', '911,911,911,911,,,,911,911,,,,911,,911,911,911,911,911,911,911,,,,,', '911,911,911,911,911,911,911,,,911,,,,,,911,911,,911,911,911,911,911', '911,911,911,911,,911,911,911,,911,911,,911,911,911,786,786,786,786,786', '786,786,786,786,786,786,,786,786,,,786,786,,911,,,911,,,911,911,,,911', ',911,786,,786,911,786,786,786,786,786,786,786,911,786,,,,911,911,911', '911,911,911,,,,911,911,,786,,,,,911,,,911,911,911,,,911,911,826,826', '826,826,826,826,,,,826,826,,,,826,,826,826,826,826,826,826,826,,,,,', '826,826,826,826,826,826,826,,,826,,,,,,826,826,,826,826,826,826,826', '826,826,826,826,,826,826,826,,826,826,,826,826,826,279,279,279,279,279', '279,279,279,279,279,279,,279,279,,,279,279,,826,,,826,,,826,826,,,826', ',826,279,,279,826,279,279,279,279,279,279,279,826,279,,,,826,826,826', '826,826,826,,,,826,826,,279,,,,,826,,,826,826,826,,,826,826,815,815', '815,815,815,815,,,,815,815,,,,815,,815,815,815,815,815,815,815,,,,,', '815,815,815,815,815,815,815,,,815,,,,,,815,815,,815,815,815,815,815', '815,815,815,815,,815,815,815,,815,815,,815,815,815,485,485,485,485,485', '485,485,485,485,485,485,,485,485,,,485,485,,815,,,815,,,815,815,,,815', ',815,485,,485,815,485,485,485,485,485,485,485,815,485,,,,815,815,815', '815,815,815,,,,815,815,485,485,,,,,815,,,815,815,815,,,815,815,816,816', '816,816,816,816,,,,816,816,,,,816,,816,816,816,816,816,816,816,,,,,', '816,816,816,816,816,816,816,,,816,,,,,,816,816,,816,816,816,816,816', '816,816,816,816,,816,816,816,,816,816,,816,816,816,790,790,790,790,790', '790,790,790,790,790,790,,790,790,,,790,790,,816,,,816,,,816,816,,,816', ',816,790,,790,816,790,790,790,790,790,790,790,816,790,,,,816,816,816', '816,816,816,,,,816,816,,790,,,,,816,,,816,816,816,,,816,816,907,907', '907,907,907,907,,,,907,907,,,,907,,907,907,907,907,907,907,907,,,,,', '907,907,907,907,907,907,907,,,907,,,,,,907,907,,907,907,907,907,907', '907,907,907,907,,907,907,907,,907,907,,907,907,907,534,534,534,534,534', '534,534,534,534,534,534,,534,534,,,534,534,,907,,,907,,,907,907,,,907', ',907,534,,534,907,534,534,534,534,534,534,534,907,534,,,,907,907,907', '907,907,907,,,,907,907,,534,,,,,907,,,907,907,907,,,907,907,299,299', '299,299,299,299,,,,299,299,,,,299,,299,299,299,299,299,299,299,,,,,', '299,299,299,299,299,299,299,,,299,,,,,,299,299,,299,299,299,299,299', '299,299,299,299,,299,299,299,,299,299,,299,299,299,483,483,483,483,483', '483,483,,,483,483,,,,,,483,483,,299,,,299,,,299,299,,,299,,299,483,', '483,299,483,483,483,483,483,483,483,299,483,,,,299,299,299,299,299,299', ',,,299,299,,,,,,,299,,,299,299,299,,,299,299,989,989,989,989,989,989', ',,,989,989,,,,989,,989,989,989,989,989,989,989,,,,,,989,989,989,989', '989,989,989,,,989,,,,,,989,989,,989,989,989,989,989,989,989,989,989', ',989,989,989,,989,989,,989,989,989,460,460,460,460,460,460,460,460,460', '460,460,,460,460,,,460,460,,989,,,989,,,989,989,,,989,,989,460,,460', '989,460,460,460,460,460,460,460,989,460,,,,989,989,989,989,989,989,', ',,989,989,,,,,,,989,,,989,989,989,,,989,989,329,329,329,329,329,329', ',,,329,329,,,,329,,329,329,329,329,329,329,329,,,,,,329,329,329,329', '329,329,329,,,329,,,,,,329,329,,329,329,329,329,329,329,329,329,329', ',329,329,329,,329,329,,329,329,329,461,461,461,461,461,461,461,461,461', '461,461,,461,461,,,461,461,,329,,,329,,,329,329,,,329,,329,461,,461', '329,461,461,461,461,461,461,461,329,461,,,,329,329,329,329,329,329,', ',,329,329,,,,,,,329,,,329,329,329,,,329,329,708,708,708,708,708,708', ',,,708,708,,,,708,,708,708,708,708,708,708,708,,,,,,708,708,708,708', '708,708,708,,,708,,,,,,708,708,,708,708,708,708,708,708,708,708,708', ',708,708,708,,708,708,,708,708,708,477,477,477,477,477,477,477,,,477', '477,,,,,,477,477,,708,,,708,,,708,708,,,708,,708,477,,477,708,477,477', '477,477,477,477,477,708,477,,,,708,708,708,708,708,708,,,,708,708,,', ',,,,708,,,708,708,708,,,708,708,2,2,2,2,2,2,,,,2,2,,,,2,,2,2,2,2,2,2', '2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2,2,,2,2,,2', '2,2,478,478,478,478,478,478,478,,,478,478,,,,,,478,478,,2,,,2,,,2,2', ',,2,,2,478,,478,2,478,478,478,478,478,478,478,2,478,,,,2,2,2,2,2,2,', ',,2,2,,,,,,,2,,,2,2,2,,,2,2,759,759,759,759,759,759,,,,759,759,,,,759', ',759,759,759,759,759,759,759,,,,,,759,759,759,759,759,759,759,,,759', ',,,,,759,759,,759,759,759,759,759,759,759,759,759,,759,759,759,,759', '759,,759,759,759,479,479,479,479,479,479,479,,,479,479,,,,,,479,479', ',759,,,759,,,759,759,,,759,,759,479,,479,759,479,479,479,479,479,479', '479,759,479,,,,759,759,759,759,759,759,,,,759,759,,,,,,,759,,,759,759', '759,,,759,759,868,868,868,868,868,868,,,,868,868,,,,868,,868,868,868', '868,868,868,868,,,,,,868,868,868,868,868,868,868,,,868,,,,,,868,868', ',868,868,868,868,868,868,868,868,868,,868,868,868,,868,868,,868,868', '868,480,480,480,480,480,480,480,,,480,480,,,,,,480,480,,868,,,868,,', '868,868,,,868,,868,480,,480,868,480,480,480,480,480,480,480,868,480', ',,,868,868,868,868,868,868,,,,868,868,,,,,,,868,,,868,868,868,,,868', '868,760,760,760,760,760,760,,,,760,760,,,,760,,760,760,760,760,760,760', '760,,,,,,760,760,760,760,760,760,760,,,760,,,,,,760,760,,760,760,760', '760,760,760,760,760,760,,760,760,760,,760,760,,760,760,760,484,484,484', '484,484,484,484,484,,484,484,,,,,,484,484,,760,,,760,,,760,760,,,760', ',760,484,,484,760,484,484,484,484,484,484,484,760,484,,,,760,760,760', '760,760,760,,,,760,760,,,,,,,760,,,760,760,760,,,760,760,766,766,766', '766,766,766,,,,766,766,,,,766,,766,766,766,766,766,766,766,,,,,,766', '766,766,766,766,766,766,,,766,,,,,,766,766,,766,766,766,766,766,766', '766,766,766,,766,766,766,,766,766,,766,766,766,471,471,471,471,471,471', '471,,,471,471,,,,,,471,471,,766,,,766,,,766,766,,,766,,766,471,,471', '766,471,471,471,471,471,471,471,766,471,,,,766,766,766,766,766,766,', ',,766,766,,,,,,,766,,,766,766,766,,,766,766,407,407,407,407,407,407', ',,,407,407,,,,407,,407,407,407,407,407,407,407,,,,,,407,407,407,407', '407,407,407,,,407,,,,,,407,407,407,407,407,407,407,407,407,407,407,407', ',407,407,407,,407,407,,407,407,407,476,476,476,476,476,476,476,,,476', '476,,,,,,476,476,,407,,,407,,,407,407,,,407,,407,476,,476,407,476,476', '476,476,476,476,476,407,476,,,,407,407,407,407,407,407,,,,407,407,,', ',,,,407,,,407,407,407,,,407,407,36,36,36,36,36,36,,,,36,36,,,,36,,36', '36,36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,,36,,,,,,36,36,,36,36,36', '36,36,36,36,36,36,,36,36,36,,36,36,,36,36,36,468,,,,,,,,,,,,,,,,468', '468,,36,,,36,,470,36,36,,,36,,36,468,,468,36,468,468,468,468,470,470', ',36,,,,,36,36,36,36,36,36,,,470,36,36,,470,470,470,470,,36,,,36,36,36', ',,36,36,583,583,583,583,583,583,,,,583,583,,,,583,,583,583,583,583,583', '583,583,,,,,,583,583,583,583,583,583,583,,,583,,,,,,583,583,,583,583', '583,583,583,583,583,583,583,,583,583,583,,583,583,,583,583,583,469,', ',,,,,,,,,,,,,,469,469,,583,,,583,,,583,583,,,583,,583,469,,469,583,469', '469,469,469,,,,583,,,,,583,583,583,583,583,583,,,,583,583,,,,,,,583', ',,583,583,583,,,583,583,586,586,586,586,586,586,,,,586,586,,,,586,,586', '586,586,586,586,586,586,,,,,,586,586,586,586,586,586,586,,,586,,,,,', '586,586,,586,586,586,586,586,586,586,586,586,,586,586,586,,586,586,', '586,586,586,,,,,,,,,,,,,,,,,,,,586,,,586,,,586,586,,,586,,586,,,,586', ',,,,,,,586,,,,,586,586,586,586,586,586,,,,586,586,,,,,,,586,,,586,586', '586,,,586,586,257,257,257,,257,,,,257,257,,,,257,,257,257,257,257,257', '257,257,,,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257,257,257', '257,257,257,257,257,,257,257,257,,257,257,,257,257,257,,,,,,,,,,,,,', ',,,,,,257,,,257,,,257,257,,,257,,,,,,257,,,,,,,,257,,,,,257,257,257', '257,257,257,,,,257,257,,,,,,,257,,,257,257,257,,,257,257,455,455,455', ',455,,,,455,455,,,,455,,455,455,455,455,455,455,455,,,,,,455,455,455', '455,455,455,455,,,455,,,,,,,455,,,455,455,455,455,455,455,455,455,455', '455,455,455,,455,455,,455,455,455,,,,,,,,,,,,,,,,,,,,455,,,455,,,455', '455,,,455,,455,,455,,455,,,,,,,,455,,,,,455,455,455,455,455,455,,,,455', '455,,,,,,,455,,455,455,455,455,,,455,455,8,8,8,8,8,,,,8,8,,,,8,,8,8', '8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8,8,8,8,8,8,8,,8,8,8', ',8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8,,,,8,,,,,,,,8,,,,', '8,8,8,8,8,8,,,,8,8,,,,,,,8,,,8,8,8,,,8,8,1015,1015,1015,,1015,,,,1015', '1015,,,,1015,,1015,1015,1015,1015,1015,1015,1015,,,,,,1015,1015,1015', '1015,1015,1015,1015,,,1015,,,,,,,1015,,,1015,1015,1015,1015,1015,1015', '1015,1015,1015,1015,1015,1015,,1015,1015,,1015,1015,1015,,,,,,,,,,,', ',,,,,,,,1015,,,1015,,,1015,1015,,,1015,,1015,,1015,,1015,,,,,,,,1015', ',,,,1015,1015,1015,1015,1015,1015,,,,1015,1015,,,,,,,1015,,1015,1015', '1015,1015,,,1015,1015,23,23,23,,23,,,,23,23,,,,23,,23,23,23,23,23,23', '23,,,,,,23,23,23,23,23,23,23,,,23,,,,,,,23,,,23,23,23,23,23,23,23,23', ',23,23,23,,23,23,,23,23,23,,,,,,,,,,,,,,,,,,,,23,,,23,,,23,23,,,23,', ',,,,23,,,,,,,,23,,,,,23,23,23,23,23,23,,,,23,23,,,,,,,23,,,23,23,23', ',,23,23,32,32,32,,32,,,,32,32,,,,32,,32,32,32,32,32,32,32,,,,,,32,32', '32,32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32,32,32,', '32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,,32,,,32,32,,,32,,32,,32,,32', ',,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32,,,,,,,32,,32,32,32,32,,,32', '32,33,33,33,,33,,,,33,33,,,,33,,33,33,33,33,33,33,33,,,,,,33,33,33,33', '33,33,33,,,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33,,33,33', ',33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33,33,,,33,,33,,33,,33,,,,,,', ',33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33,,33,33,33,33,,,33,33,34', '34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34', '34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34,,34,34', '34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34,,34,,34,,34,,,,,,,,34,,,', ',34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34,34,34,,,34,34,37,37,37,', '37,,,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,', '37,,,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,', ',,,,,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37,37', '37,,,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,,38', ',38,38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38,38', '38,38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,,38', ',,38,38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,,,38', ',,38,38,38,,,38,38,940,940,940,,940,,,,940,940,,,,940,,940,940,940,940', '940,940,940,,,,,,940,940,940,940,940,940,940,,,940,,,,,,,940,,,940,940', '940,940,940,940,940,940,,940,940,940,,940,940,,940,940,940,,,,,,,,,', ',,,,,,,,,,940,,,940,,,940,940,,,940,,940,,,,940,,,,,,,,940,,,,,940,940', '940,940,940,940,,,,940,940,,,,,,,940,,,940,940,940,,,940,940,915,915', '915,,915,,,,915,915,,,,915,,915,915,915,915,915,915,915,,,,,,915,915', '915,915,915,915,915,,,915,,,,,,,915,,,915,915,915,915,915,915,915,915', ',915,915,915,,915,915,,,,915,,,,,,,,,,,,,,,,,,,,915,,,915,,,915,915', ',,915,,,,,,,,,,,,,,,,,,,915,915,915,915,915,915,,,,915,915,,,,,,,915', ',,915,915,915,,,915,915,45,45,45,,45,,,,45,45,,,,45,,45,45,45,45,45', '45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45,45,45,45,45', '45,,45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45,,,45,45,,,45', ',,,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,,45,,,45,45,45', ',,45,45,46,46,46,,46,,,,46,46,,,,46,,46,46,46,46,46,46,46,,,,,,46,46', '46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46,46,46,,46', '46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,,46,,,,,,,', '46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,,,46,46,47,47', '47,,47,,,,47,47,,,,47,,47,47,47,47,47,47,47,,,,,,47,47,47,47,47,47,47', ',,47,,,,,,,47,,,47,47,47,47,47,47,47,47,,47,47,47,,47,47,,47,47,47,', ',,,,,,,,,,,,,,,,,,47,,,47,,,47,47,,,47,,,,,,47,,,,,,,,47,,,,,47,47,47', '47,47,47,,,,47,47,,,,,,,47,,,47,47,47,,,47,47,62,62,62,,62,,,,62,62', ',,,62,,62,62,62,62,62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,,62', ',,62,62,62,62,62,62,62,62,62,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,', ',,,,,,62,,,62,,,62,62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62', ',,,62,62,,,,,,,62,,62,62,62,62,,,62,62,66,66,66,,66,,,,66,66,,,,66,', '66,66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,,66,,,66,66', '66,66,66,66,66,66,,66,66,66,,66,66,,66,66,66,,,,,,,,,,,,,,,,,,,,66,', ',66,,,66,66,,,66,,,,,,66,,,,,,,,66,,,,,66,66,66,66,66,66,,,,66,66,,', ',,,,66,,,66,66,66,,,66,66,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67', '67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67', '67,,67,67,67,,67,67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67', ',,,,,67,,,,,,,,67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67', ',,67,67,70,70,70,,70,,,,70,70,,,,70,,70,70,70,70,70,70,70,,,,,,70,70', '70,70,70,70,70,,,70,,,,,,,70,,,70,70,70,70,70,70,70,70,,70,70,70,,70', '70,,70,70,70,,,,,,,,,,,,,,,,,,,,70,,,70,,,70,70,,,70,,,,,,70,,,,,,,', '70,,,,,70,70,70,70,70,70,,,,70,70,70,,,,,70,70,,,70,70,70,,,70,70,71', '71,71,,71,,,,71,71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71', '71,,,71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,,,71,,', ',,,,,,,,,,,,,,,,,71,,,71,,,71,71,,,71,,71,,,,,,,,,,,,,,,,,71,71,71,71', '71,71,,,,71,71,,,,,,,71,,,71,71,71,,,71,71,903,903,903,,903,,,,903,903', ',,,903,,903,903,903,903,903,903,903,,,,,,903,903,903,903,903,903,903', ',,903,,,,,,,903,,,903,903,903,903,903,903,903,903,,903,903,903,,903', '903,,,,903,,,,,,,,,,,,,,,,,,,,903,,,903,,,903,903,,,903,,,,,,,,,,,,', ',,,,,,903,903,903,903,903,903,,,,903,903,,,,,,,903,,,903,903,903,,,903', '903,888,888,888,,888,,,,888,888,,,,888,,888,888,888,888,888,888,888', ',,,,,888,888,888,888,888,888,888,,,888,,,,,,,888,,,888,888,888,888,888', '888,888,888,,888,888,888,,888,888,,888,888,888,,,,,,,,,,,,,,,,,,,,888', ',,888,,,888,888,,,888,,,,,,888,,,,,,,,888,,,,,888,888,888,888,888,888', ',,,888,888,,,,,,,888,,,888,888,888,,,888,888,887,887,887,,887,,,,887', '887,,,,887,,887,887,887,887,887,887,887,,,,,,887,887,887,887,887,887', '887,,,887,,,,,,,887,,,887,887,887,887,887,887,887,887,887,887,887,887', ',887,887,,887,887,887,,,,,,,,,,,,,,,,,,,,887,,,887,,,887,887,,,887,', ',,887,,887,,,,,,,,887,,,,,887,887,887,887,887,887,,,,887,887,,,,,,,887', ',887,887,887,887,,,887,887,869,869,869,,869,,,,869,869,,,,869,,869,869', '869,869,869,869,869,,,,,,869,869,869,869,869,869,869,,,869,,,,,,,869', ',,869,869,869,869,869,869,869,869,,869,869,869,,869,869,,869,869,869', ',,,,,,,,,,,,,,,,,,,869,,,869,,,869,869,,,869,,,,,,869,,,,,,,,869,,,', ',869,869,869,869,869,869,,,,869,869,,,,,,,869,,,869,869,869,,,869,869', '114,114,114,114,114,,,,114,114,,,,114,,114,114,114,114,114,114,114,', ',,,,114,114,114,114,114,114,114,,,114,,,,,,114,114,114,114,114,114,114', '114,114,114,114,114,,114,114,114,,114,114,,114,114,114,,,,,,,,,,,,,', ',,,,,,114,,,114,,,114,114,,,114,,114,,,,114,,,,,,,,114,,,,,114,114,114', '114,114,114,,,,114,114,,,,,,114,114,,,114,114,114,,,114,114,119,119', '119,,119,,,,119,119,,,,119,,119,119,119,119,119,119,119,,,,,,119,119', '119,119,119,119,119,,,119,,,,,,,119,,,119,119,119,119,119,119,119,119', ',119,119,119,,119,119,,119,119,119,,,,,,,,,,,,,,,,,,,,119,,,119,,,119', '119,,,119,,,,,,119,,,,,,,,119,,,,,119,119,119,119,119,119,,,,119,119', ',,,,,,119,,,119,119,119,,,119,119,120,120,120,,120,,,,120,120,,,,120', ',120,120,120,120,120,120,120,,,,,,120,120,120,120,120,120,120,,,120', ',,,,,,120,,,120,120,120,120,120,120,120,120,,120,120,120,,120,120,,120', '120,120,,,,,,,,,,,,,,,,,,,,120,,,120,,,120,120,,,120,,,,,,120,,,,,,', ',120,,,,,120,120,120,120,120,120,,,,120,120,,,,,,,120,,,120,120,120', ',,120,120,121,121,121,,121,,,,121,121,,,,121,,121,121,121,121,121,121', '121,,,,,,121,121,121,121,121,121,121,,,121,,,,,,,121,,,121,121,121,121', '121,121,121,121,,121,121,121,,121,121,,121,121,121,,,,,,,,,,,,,,,,,', ',,121,,,121,,,121,121,,,121,,,,,,121,,,,,,,,121,,,,,121,121,121,121', '121,121,,,,121,121,,,,,,,121,,,121,121,121,,,121,121,122,122,122,,122', ',,,122,122,,,,122,,122,122,122,122,122,122,122,,,,,,122,122,122,122', '122,122,122,,,122,,,,,,,122,,,122,122,122,122,122,122,122,122,,122,122', '122,,122,122,,122,122,122,,,,,,,,,,,,,,,,,,,,122,,,122,,,122,122,,,122', ',,,,,122,,,,,,,,122,,,,,122,122,122,122,122,122,,,,122,122,,,,,,,122', ',,122,122,122,,,122,122,123,123,123,123,123,,,,123,123,,,,123,,123,123', '123,123,123,123,123,,,,,,123,123,123,123,123,123,123,,,123,,,,,,123', '123,,123,123,123,123,123,123,123,123,123,,123,123,123,,123,123,,123', '123,123,,,,,,,,,,,,,,,,,,,,123,,,123,,,123,123,,,123,,123,,,,123,,,', ',,,,123,,,,,123,123,123,123,123,123,,,,123,123,,,,,,,123,,,123,123,123', ',,123,123,210,210,210,,210,,,,210,210,,,,210,,210,210,210,210,210,210', '210,,,,,,210,210,210,210,210,210,210,,,210,,,,,,,210,,,210,210,210,210', '210,210,210,210,,210,210,210,,210,210,,210,210,210,,,,,,,,,,,,,,,,,', ',,210,,,210,,,210,210,,,210,,210,,,,210,,,,,,,,210,,,,,210,210,210,210', '210,210,,,,210,210,,,,,,,210,,,210,210,210,,,210,210,211,211,211,,211', ',,,211,211,,,,211,,211,211,211,211,211,211,211,,,,,,211,211,211,211', '211,211,211,,,211,,,,,,,211,,,211,211,211,211,211,211,211,211,,211,211', '211,,211,211,,211,211,211,,,,,,,,,,,,,,,,,,,,211,,,211,,,211,211,,,211', ',,,,,211,,,,,,,,211,,,,,211,211,211,211,211,211,,,,211,211,,,,,,,211', ',,211,211,211,,,211,211,212,212,212,,212,,,,212,212,,,,212,,212,212', '212,212,212,212,212,,,,,,212,212,212,212,212,212,212,,,212,,,,,,,212', ',,212,212,212,212,212,212,212,212,212,212,212,212,,212,212,,212,212', '212,,,,,,,,,,,,,,,,,,,,212,,,212,,,212,212,,,212,,212,,212,,212,,,,', ',,,212,,,,,212,212,212,212,212,212,,,,212,212,,,,,,,212,,212,212,212', '212,,,212,212,217,217,217,,217,,,,217,217,,,,217,,217,217,217,217,217', '217,217,,,,,,217,217,217,217,217,217,217,,,217,,,,,,,217,,,217,217,217', '217,217,217,217,217,,217,217,217,,217,217,,217,217,217,,,,,,,,,,,,,', ',,,,,,217,,,217,,,217,217,,,217,,,,,,217,,,,,,,,217,,,,,217,217,217', '217,217,217,,,,217,217,,,,,,,217,,,217,217,217,,,217,217,218,218,218', ',218,,,,218,218,,,,218,,218,218,218,218,218,218,218,,,,,,218,218,218', '218,218,218,218,,,218,,,,,,,218,,,218,218,218,218,218,218,218,218,,218', '218,218,,218,218,,218,218,218,,,,,,,,,,,,,,,,,,,,218,,,218,,,218,218', ',,218,,218,,,,218,,,,,,,,218,,,,,218,218,218,218,218,218,,,,218,218', ',,,,,,218,,,218,218,218,,,218,218,219,219,219,,219,,,,219,219,,,,219', ',219,219,219,219,219,219,219,,,,,,219,219,219,219,219,219,219,,,219', ',,,,,,219,,,219,219,219,219,219,219,219,219,,219,219,219,,219,219,,219', '219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,219,,,219,,,,,,219,,,,,,', ',219,,,,,219,219,219,219,219,219,,,,219,219,,,,,,,219,,,219,219,219', ',,219,219,220,220,220,,220,,,,220,220,,,,220,,220,220,220,220,220,220', '220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220,,,220,220,220,220', '220,220,220,220,,220,220,220,,220,220,,220,220,220,,,,,,,,,,,,,,,,,', ',,220,,,220,,,220,220,,,220,,,,,,220,,,,,,,,220,,,,,220,220,220,220', '220,220,,,,220,220,,,,,,,220,,,220,220,220,,,220,220,221,221,221,,221', ',,,221,221,,,,221,,221,221,221,221,221,221,221,,,,,,221,221,221,221', '221,221,221,,,221,,,,,,,221,,,221,221,221,221,221,221,221,221,,221,221', '221,,221,221,,221,221,221,,,,,,,,,,,,,,,,,,,,221,,,221,,,221,221,,,221', ',,,,,221,,,,,,,,221,,,,,221,221,221,221,221,221,,,,221,221,,,,,,,221', ',,221,221,221,,,221,221,222,222,222,,222,,,,222,222,,,,222,,222,222', '222,222,222,222,222,,,,,,222,222,222,222,222,222,222,,,222,,,,,,,222', ',,222,222,222,222,222,222,222,222,,222,222,222,,222,222,,222,222,222', ',,,,,,,,,,,,,,,,,,,222,,,222,,,222,222,,,222,,,,,,222,,,,,,,,222,,,', ',222,222,222,222,222,222,,,,222,222,222,,,,,,222,,,222,222,222,,,222', '222,856,856,856,,856,,,,856,856,,,,856,,856,856,856,856,856,856,856', ',,,,,856,856,856,856,856,856,856,,,856,,,,,,,856,,,856,856,856,856,856', '856,856,856,,856,856,856,,856,856,,856,856,856,,,,,,,,,,,,,,,,,,,,856', ',,856,,,856,856,,,856,,,,,,856,,,,,,,,856,,,,,856,856,856,856,856,856', ',,,856,856,,,,,,,856,,,856,856,856,,,856,856,741,741,741,,741,,,,741', '741,,,,741,,741,741,741,741,741,741,741,,,,,,741,741,741,741,741,741', '741,,,741,,,,,,,741,,,741,741,741,741,741,741,741,741,,741,741,741,', '741,741,,741,741,741,,,,,,,,,,,,,,,,,,,,741,,,741,,,741,741,,,741,,741', ',,,741,,,,,,,,741,,,,,741,741,741,741,741,741,,,,741,741,,,,,,,741,', ',741,741,741,,,741,741,721,721,721,,721,,,,721,721,,,,721,,721,721,721', '721,721,721,721,,,,,,721,721,721,721,721,721,721,,,721,,,,,,,721,,,721', '721,721,721,721,721,721,721,,721,721,721,,721,721,,721,721,721,,,,,', ',,,,,,,,,,,,,,721,,,721,,,721,721,,,721,,,,,,721,,,,,,,,721,,,,,721', '721,721,721,721,721,,,,721,721,,,,,,,721,,,721,721,721,,,721,721,701', '701,701,,701,,,,701,701,,,,701,,701,701,701,701,701,701,701,,,,,,701', '701,701,701,701,701,701,,,701,,,,,,,701,,,701,701,701,701,701,701,701', '701,,701,701,701,,701,701,,701,701,701,,,,,,,,,,,,,,,,,,,,701,,,701', ',,701,701,,,701,,701,,,,701,,,,,,,,701,,,,,701,701,701,701,701,701,', ',,701,701,,,,,,,701,,,701,701,701,,,701,701,696,696,696,,696,,,,696', '696,,,,696,,696,696,696,696,696,696,696,,,,,,696,696,696,696,696,696', '696,,,696,,,,,,,696,,,696,696,696,696,696,696,696,696,,696,696,696,', '696,696,,,,696,,,,,,,,,,,,,,,,,,,,696,,,696,,,696,696,,,696,,,,,,,,', ',,,,,,,,,,696,696,696,696,696,696,,,,696,696,,,,,,,696,,,696,696,696', ',,696,696,320,320,320,,320,,,,320,320,,,,320,,320,320,320,320,320,320', '320,,,,,,320,320,320,320,320,320,320,,,320,,,,,,,320,,,320,320,320,320', '320,320,320,320,,320,320,320,,320,320,,,,320,,,,,,,,,,,,,,,,,,,,320', ',,320,,,320,320,,,320,,,,,,,,,,,,,,,,,,,320,320,320,320,320,320,,,,320', '320,,,,,,,320,,,320,320,320,,,320,320,685,685,685,,685,,,,685,685,,', ',685,,685,685,685,685,685,685,685,,,,,,685,685,685,685,685,685,685,', ',685,,,,,,,685,,,685,685,685,685,685,685,685,685,,685,685,685,,685,685', ',,,685,,,,,,,,,,,,,,,,,,,,685,,,685,,,685,685,,,685,,,,,,,,,,,,,,,,', ',,685,685,685,685,685,685,,,,685,685,,,,,,,685,,,685,685,685,,,685,685', '681,681,681,,681,,,,681,681,,,,681,,681,681,681,681,681,681,681,,,,', ',681,681,681,681,681,681,681,,,681,,,,,,,681,,,681,681,681,681,681,681', '681,681,,681,681,681,,681,681,,681,681,681,,,,,,,,,,,,,,,,,,,,681,,', '681,,,681,681,,,681,,,,,,681,,,,,,,,681,,,,,681,681,681,681,681,681', ',,,681,681,,,,,,,681,,,681,681,681,,,681,681,328,328,328,,328,,,,328', '328,,,,328,,328,328,328,328,328,328,328,,,,,,328,328,328,328,328,328', '328,,,328,,,,,,,328,,,328,328,328,328,328,328,328,328,,328,328,328,', '328,328,,328,328,328,,,,,,,,,,,,,,,,,,,,328,,,328,328,,328,328,,,328', ',,,,,328,,,,,,,,328,,,,,328,328,328,328,328,328,,,,328,328,,,,,,,328', ',,328,328,328,,,328,328,331,331,331,,331,,,,331,331,,,,331,,331,331', '331,331,331,331,331,,,,,,331,331,331,331,331,331,331,,,331,,,,,,,331', ',,331,331,331,331,331,331,331,331,,331,331,331,,331,331,,331,331,331', ',,,,,,,,,,,,,,,,,,,331,,,331,,,331,331,,,331,,,,,,331,,,,,,,,331,,,', ',331,331,331,331,331,331,,,,331,331,,,,,,,331,,,331,331,331,,,331,331', '678,678,678,,678,,,,678,678,,,,678,,678,678,678,678,678,678,678,,,,', ',678,678,678,678,678,678,678,,,678,,,,,,,678,,,678,678,678,678,678,678', '678,678,,678,678,678,,678,678,,678,678,678,,,,,,,,,,,,,,,,,,,,678,,', '678,,,678,678,,,678,,,,,,678,,,,,,,,678,,,,,678,678,678,678,678,678', ',,,678,678,,,,,,,678,,,678,678,678,,,678,678,654,654,654,,654,,,,654', '654,,,,654,,654,654,654,654,654,654,654,,,,,,654,654,654,654,654,654', '654,,,654,,,,,,,654,,,654,654,654,654,654,654,654,654,,654,654,654,', '654,654,,654,654,654,,,,,,,,,,,,,,,,,,,,654,,,654,,,654,654,,,654,,', ',,,654,,,,,,,,654,,,,,654,654,654,654,654,654,,,,654,654,,,,,,,654,', ',654,654,654,,,654,654,337,337,337,,337,,,,337,337,,,,337,,337,337,337', '337,337,337,337,,,,,,337,337,337,337,337,337,337,,,337,,,,,,,337,,,337', '337,337,337,337,337,337,337,337,337,337,337,,337,337,,337,337,337,,', ',,,,,,,,,,,,,,,,,337,,,337,,,337,337,,,337,,,,,,337,,,,,,,,337,,,,,337', '337,337,337,337,337,,,,337,337,,,,,,,337,,337,337,337,337,,,337,337', '653,653,653,,653,,,,653,653,,,,653,,653,653,653,653,653,653,653,,,,', ',653,653,653,653,653,653,653,,,653,,,,,,,653,,,653,653,653,653,653,653', '653,653,,653,653,653,,653,653,,653,653,653,,,,,,,,,,,,,,,,,,,,653,,', '653,,,653,653,,,653,,,,,,653,,,,,,,,653,,,,,653,653,653,653,653,653', ',,,653,653,,,,,,,653,,,653,653,653,,,653,653,650,650,650,,650,,,,650', '650,,,,650,,650,650,650,650,650,650,650,,,,,,650,650,650,650,650,650', '650,,,650,,,,,,,650,,,650,650,650,650,650,650,650,650,,650,650,650,', '650,650,,650,650,650,,,,,,,,,,,,,,,,,,,,650,,,650,,,650,650,,,650,,', ',,,650,,,,,,,,650,,,,,650,650,650,650,650,650,,,,650,650,,,,,,,650,', ',650,650,650,,,650,650,344,344,344,,344,,,,344,344,,,,344,,344,344,344', '344,344,344,344,,,,,,344,344,344,344,344,344,344,,,344,,,,,,,344,,,344', '344,344,344,344,344,344,344,,344,344,344,,344,344,,344,344,344,,,,,', ',,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,,,,,344,,,,,,,,344,,,,,344', '344,344,344,344,344,,,,344,344,,,,,,,344,,,344,344,344,,,344,344,345', '345,345,,345,,,,345,345,,,,345,,345,345,345,345,345,345,345,,,,,,345', '345,345,345,345,345,345,,,345,,,,,,,345,,,345,345,345,345,345,345,345', '345,,345,345,345,,345,345,,345,345,345,,,,,,,,,,,,,,,,,,,,345,,,345', ',,345,345,,,345,,,,,,345,,,,,,,,345,,,,,345,345,345,345,345,345,,,,345', '345,,,,,,,345,,,345,345,345,,,345,345,649,649,649,,649,,,,649,649,,', ',649,,649,649,649,649,649,649,649,,,,,,649,649,649,649,649,649,649,', ',649,,,,,,,649,,,649,649,649,649,649,649,649,649,,649,649,649,,649,649', ',649,649,649,,,,,,,,,,,,,,,,,,,,649,,,649,,,649,649,,,649,,,,,,649,', ',,,,,,649,,,,,649,649,649,649,649,649,,,,649,649,,,,,,,649,,,649,649', '649,,,649,649,644,644,644,,644,,,,644,644,,,,644,,644,644,644,644,644', '644,644,,,,,,644,644,644,644,644,644,644,,,644,,,,,,,644,,,644,644,644', '644,644,644,644,644,,644,644,644,,644,644,,644,644,644,,,,,,,,,,,,,', ',,,,,,644,,,644,,,644,644,,,644,,,,,,644,,,,,,,,644,,,,,644,644,644', '644,644,644,,,,644,644,,,,,,,644,,,644,644,644,,,644,644,643,643,643', ',643,,,,643,643,,,,643,,643,643,643,643,643,643,643,,,,,,643,643,643', '643,643,643,643,,,643,,,,,,,643,,,643,643,643,643,643,643,643,643,,643', '643,643,,643,643,,643,643,643,,,,,,,,,,,,,,,,,,,,643,,,643,,,643,643', ',,643,,,,,,643,,,,,,,,643,,,,,643,643,643,643,643,643,,,,643,643,,,', ',,,643,,,643,643,643,,,643,643,642,642,642,,642,,,,642,642,,,,642,,642', '642,642,642,642,642,642,,,,,,642,642,642,642,642,642,642,,,642,,,,,', ',642,,,642,642,642,642,642,642,642,642,642,642,642,642,,642,642,,642', '642,642,,,,,,,,,,,,,,,,,,,,642,,,642,,,642,642,,,642,,,,642,,642,,,', ',,,,642,,,,,642,642,642,642,642,642,,,,642,642,,,,,,,642,,642,642,642', '642,,,642,642,641,641,641,,641,,,,641,641,,,,641,,641,641,641,641,641', '641,641,,,,,,641,641,641,641,641,641,641,,,641,,,,,,,641,,,641,641,641', '641,641,641,641,641,641,641,641,641,,641,641,,641,641,641,,,,,,,,,,', ',,,,,,,,,641,,,641,,,641,641,,,641,,641,,641,,641,,,,,,,,641,,,,,641', '641,641,641,641,641,,,,641,641,,,,,,,641,,641,641,641,641,,,641,641', '638,638,638,,638,,,,638,638,,,,638,,638,638,638,638,638,638,638,,,,', ',638,638,638,638,638,638,638,,,638,,,,,,,638,,,638,638,638,638,638,638', '638,638,,638,638,638,,638,638,,638,638,638,,,,,,,,,,,,,,,,,,,,638,,', '638,,,638,638,,,638,,,,,,638,,,,,,,,638,,,,,638,638,638,638,638,638', ',,,638,638,,,,,,,638,,,638,638,638,,,638,638,357,357,357,,357,,,,357', '357,,,,357,,357,357,357,357,357,357,357,,,,,,357,357,357,357,357,357', '357,,,357,,,,,,,357,,,357,357,357,357,357,357,357,357,,357,357,357,', '357,357,,,,357,,,,,,,,,,,,,,,,,,,,357,,,357,,,357,357,,,357,,,,,,,,', ',,,,,,,,,,357,357,357,357,357,357,,,,357,357,,,,,,,357,,,357,357,357', ',,357,357,359,359,359,,359,,,,359,359,,,,359,,359,359,359,359,359,359', '359,,,,,,359,359,359,359,359,359,359,,,359,,,,,,,359,,,359,359,359,359', '359,359,359,359,,359,359,359,,359,359,,,,359,,,,,,,,,,,,,,,,,,,,359', ',,359,,,359,359,,,359,,,,,,,,,,,,,,,,,,,359,359,359,359,359,359,,,,359', '359,,,,,,,359,,,359,359,359,,,359,359,637,637,637,,637,,,,637,637,,', ',637,,637,637,637,637,637,637,637,,,,,,637,637,637,637,637,637,637,', ',637,,,,,,,637,,,637,637,637,637,637,637,637,637,,637,637,637,,637,637', ',637,637,637,,,,,,,,,,,,,,,,,,,,637,,,637,,,637,637,,,637,,637,,,,637', ',,,,,,,637,,,,,637,637,637,637,637,637,,,,637,637,,,,,,,637,,,637,637', '637,,,637,637,608,608,608,,608,,,,608,608,,,,608,,608,608,608,608,608', '608,608,,,,,,608,608,608,608,608,608,608,,,608,,,,,,,608,,,608,608,608', '608,608,608,608,608,,608,608,608,,608,608,,608,608,608,,,,,,,,,,,,,', ',,,,,,608,,,608,,,608,608,,,608,,,,,,608,,,,,,,,608,,,,,608,608,608', '608,608,608,,,,608,608,,,,,,,608,,,608,608,608,,,608,608,604,604,604', ',604,,,,604,604,,,,604,,604,604,604,604,604,604,604,,,,,,604,604,604', '604,604,604,604,,,604,,,,,,,604,,,604,604,604,604,604,604,604,604,,604', '604,604,,604,604,,604,604,604,,,,,,,,,,,,,,,,,,,,604,,,604,,,604,604', ',,604,,,,,,604,,,,,,,,604,,,,,604,604,604,604,604,604,,,,604,604,,,', ',,,604,,,604,604,604,,,604,604,592,592,592,,592,,,,592,592,,,,592,,592', '592,592,592,592,592,592,,,,,,592,592,592,592,592,592,592,,,592,,,,,', ',592,,,592,592,592,592,592,592,592,592,592,592,592,592,,592,592,,592', '592,592,,,,,,,,,,,,,,,,,,,,592,,,592,,,592,592,,,592,,592,,592,,592', ',,,,,,,592,,,,,592,592,592,592,592,592,,,,592,592,,,,,,,592,,592,592', '592,592,,,592,592,571,571,571,,571,,,,571,571,,,,571,,571,571,571,571', '571,571,571,,,,,,571,571,571,571,571,571,571,,,571,,,,,,,571,,,571,571', '571,571,571,571,571,571,,571,571,571,,571,571,,571,571,571,,,,,,,,,', ',,,,,,,,,,571,,,571,,,571,571,,,571,,,,,,571,,,,,,,,571,,,,,571,571', '571,571,571,571,,,,571,571,,,,,,,571,,,571,571,571,,,571,571,544,544', '544,,544,,,,544,544,,,,544,,544,544,544,544,544,544,544,,,,,,544,544', '544,544,544,544,544,,,544,,,,,,,544,,,544,544,544,544,544,544,544,544', '544,544,544,544,,544,544,,544,544,544,,,,,,,,,,,,,,,,,,,,544,,,544,', ',544,544,,,544,,,,,,544,,,,,,,,544,,,,,544,544,544,544,544,544,,,,544', '544,,,,,,,544,,544,544,544,544,,,544,544,541,541,541,,541,,,,541,541', ',,,541,,541,541,541,541,541,541,541,,,,,,541,541,541,541,541,541,541', ',,541,,,,,,,541,,,541,541,541,541,541,541,541,541,541,541,541,541,,541', '541,,541,541,541,,,,,,,,,,,,,,,,,,,,541,,,541,,,541,541,,,541,,541,', ',,541,,,,,,,,541,,,,,541,541,541,541,541,541,,,,541,541,,,,,,,541,,541', '541,541,541,,,541,541,535,535,535,,535,,,,535,535,,,,535,,535,535,535', '535,535,535,535,,,,,,535,535,535,535,535,535,535,,,535,,,,,,,535,,,535', '535,535,535,535,535,535,535,,535,535,535,,535,535,,535,535,535,,,,,', ',,,,,,,,,,,,,,535,,,535,,,535,535,,,535,,,,,,535,,,,,,,,535,,,,,535', '535,535,535,535,535,,,,535,535,,,,,,,535,,,535,535,535,,,535,535,531', '531,531,,531,,,,531,531,,,,531,,531,531,531,531,531,531,531,,,,,,531', '531,531,531,531,531,531,,,531,,,,,,,531,,,531,531,531,531,531,531,531', '531,,531,531,531,,531,531,,531,531,531,,,,,,,,,,,,,,,,,,,,531,,,531', ',,531,531,,,531,,,,,,531,,,,,,,,531,,,,,531,531,531,531,531,531,,,,531', '531,,,,,,,531,,,531,531,531,,,531,531,530,530,530,,530,,,,530,530,,', ',530,,530,530,530,530,530,530,530,,,,,,530,530,530,530,530,530,530,', ',530,,,,,,,530,,,530,530,530,530,530,530,530,530,,530,530,530,,530,530', ',530,530,530,,,,,,,,,,,,,,,,,,,,530,,,530,,,530,530,,,530,,,,,,530,', ',,,,,,530,,,,,530,530,530,530,530,530,,,,530,530,,,,,,,530,,,530,530', '530,,,530,530,527,527,527,,527,,,,527,527,,,,527,,527,527,527,527,527', '527,527,,,,,,527,527,527,527,527,527,527,,,527,,,,,,,527,,,527,527,527', '527,527,527,527,527,,527,527,527,,527,527,,,,527,,,,,,,,,,,,,,,,,,,', '527,,,527,,,527,527,,,527,,,,,,,,,,,,,,,,,,,527,527,527,527,527,527', ',,,527,527,,,,,,,527,,,527,527,527,,,527,527,521,521,521,,521,,,,521', '521,,,,521,,521,521,521,521,521,521,521,,,,,,521,521,521,521,521,521', '521,,,521,,,,,,,521,,,521,521,521,521,521,521,521,521,521,521,521,521', ',521,521,,521,521,521,,,,,,,,,,,,,,,,,,,,521,,,521,,,521,521,,,521,', '521,,521,,521,,,,,,,,521,,,,,521,521,521,521,521,521,,,,521,521,,,,', ',,521,,521,521,521,521,,,521,521,519,519,519,,519,,,,519,519,,,,519', ',519,519,519,519,519,519,519,,,,,,519,519,519,519,519,519,519,,,519', ',,,,,,519,,,519,519,519,519,519,519,519,519,,519,519,519,,519,519,,', ',519,,,,,,,,,,,,,,,,,,,,519,,,519,,,519,519,,,519,,,,,,,,,,,,,,,,,,', '519,519,519,519,519,519,,,,519,519,,,,,,,519,,,519,519,519,,,519,519', '512,512,512,512,512,,,,512,512,,,,512,,512,512,512,512,512,512,512,', ',,,,512,512,512,512,512,512,512,,,512,,,,,,512,512,,512,512,512,512', '512,512,512,512,512,,512,512,512,,512,512,,512,512,512,,,,,,,,,,,,,', ',,,,,,512,,,512,,,512,512,,,512,,512,,,,512,,,,,,,,512,,,,,512,512,512', '512,512,512,,,,512,512,,,,,,512,512,,,512,512,512,,,512,512,417,417', '417,,417,,,,417,417,,,,417,,417,417,417,417,417,417,417,,,,,,417,417', '417,417,417,417,417,,,417,,,,,,,417,,,417,417,417,417,417,417,417,417', ',417,417,417,,417,417,,417,417,417,,,,,,,,,,,,,,,,,,,,417,,,417,,,417', '417,,,417,,,,,,417,,,,,,,,417,,,,,417,417,417,417,417,417,,,,417,417', ',,,,,,417,,,417,417,417,,,417,417,509,509,509,,509,,,,509,509,,,,509', ',509,509,509,509,509,509,509,,,,,,509,509,509,509,509,509,509,,,509', ',,,,,,509,,,509,509,509,509,509,509,509,509,,509,509,509,,509,509,,509', '509,509,,,,,,,,,,,,,,,,,,,,509,,,509,,,509,509,,,509,,,,,,509,,,,,,', ',509,,,,,509,509,509,509,509,509,,,,509,509,,,,,,,509,,,509,509,509', ',,509,509,505,505,505,,505,,,,505,505,,,,505,,505,505,505,505,505,505', '505,,,,,,505,505,505,505,505,505,505,,,505,,,,,,,505,,,505,505,505,505', '505,505,505,505,,505,505,505,,505,505,,505,505,505,,,,,,,,,,,,,,,,,', ',,505,,,505,,,505,505,,,505,,,,,,505,,,,,,,,505,,,,,505,505,505,505', '505,505,,,,505,505,,,,,,,505,,,505,505,505,,,505,505,503,503,503,,503', ',,,503,503,,,,503,,503,503,503,503,503,503,503,,,,,,503,503,503,503', '503,503,503,,,503,,,,,,,503,,,503,503,503,503,503,503,503,503,503,503', '503,503,,503,503,,503,503,503,,,,,,,,,,,,,,,,,,,,503,,,503,,,503,503', ',,503,,,,503,,503,,,,,,,,503,,,,,503,503,503,503,503,503,,,,503,503', ',,,,,,503,,503,503,503,503,,,503,503,500,500,500,,500,,,,500,500,,,', '500,,500,500,500,500,500,500,500,,,,,,500,500,500,500,500,500,500,,', '500,,,,,,,500,,,500,500,500,500,500,500,500,500,500,500,500,500,,500', '500,,500,500,500,,,,,,,,,,,,,,,,,,,,500,,,500,,,500,500,,,500,,500,', '500,,500,,,,,,,,500,,,,,500,500,500,500,500,500,,,,500,500,,,,,,,500', ',500,500,500,500,,,500,500,459,459,459,,459,,,,459,459,,,,459,,459,459', '459,459,459,459,459,,,,,,459,459,459,459,459,459,459,,,459,,,,,,,459', ',,459,459,459,459,459,459,459,459,,459,459,459,,459,459,,459,459,459', ',,,,,,,,,,,,,,,,,,,459,,,459,,,459,459,,,459,,,,,,459,,,,,,,,459,,,', ',459,459,459,459,459,459,,,,459,459,,,,,,,459,,,459,459,459,,,459,459', '458,458,458,,458,,,,458,458,,,,458,,458,458,458,458,458,458,458,,,,', ',458,458,458,458,458,458,458,,,458,,,,,,,458,,,458,458,458,458,458,458', '458,458,,458,458,458,,458,458,,458,458,458,,,,,,,,,,,,,,,,,,,,458,,', '458,,,458,458,,,458,,,,,,458,,,,,,,,458,,,,,458,458,458,458,458,458', ',,,458,458,,,,,,,458,,,458,458,458,,,458,458,457,457,457,,457,,,,457', '457,,,,457,,457,457,457,457,457,457,457,,,,,,457,457,457,457,457,457', '457,,,457,,,,,,,457,,,457,457,457,457,457,457,457,457,,457,457,457,', '457,457,,457,457,457,,,,,,,,,,,,,,,,,,,,457,,,457,,,457,457,,,457,,', ',,,457,,,,,,,,457,,,,,457,457,457,457,457,457,,,,457,457,,,,,,,457,', ',457,457,457,,,457,457,808,808,808,,808,,,,808,808,,,,808,,808,808,808', '808,808,808,808,,,,,,808,808,808,808,808,808,808,,,808,,,,,,,808,,,808', '808,808,808,808,808,808,808,,808,808,808,,808,808,,,,808,,,,,,,,,,,', ',,,,,,,,808,,,808,,,808,808,,,808,,,,,,,,,,,,,,,,,,,808,808,808,808', '808,808,,,,808,808,,,,,,,808,,,808,808,808,,,808,808,233,233,233,,233', ',,,233,233,,,,233,,233,233,233,233,233,233,233,,,,,,233,233,233,233', '233,233,233,,,233,,,,,,,233,,,233,233,233,233,233,233,233,233,,233,233', '233,,233,233,,233,233,233,,,,,,,,,,,,,,,,,,,,233,,,233,,,233,233,,,233', ',,,,,233,,,,,,,,233,,,,,233,233,233,233,233,233,,,,233,233,,,,,,,233', ',,233,233,233,,,233,233,796,796,796,,796,,,,796,796,,,,796,,796,796', '796,796,796,796,796,,,,,,796,796,796,796,796,796,796,,,796,,,,,,,796', ',,796,796,796,796,796,796,796,796,,796,796,796,,796,796,,796,796,796', ',,,,,,,,,,,,,,,,,,,796,,,796,,,796,796,,,796,,,,,,796,,,,,,,,796,,,', ',796,796,796,796,796,796,,,,796,796,,,,,,,796,,,796,796,796,,,796,796', '236,236,236,,236,,,,236,236,,,,236,,236,236,236,236,236,236,236,,,,', ',236,236,236,236,236,236,236,,,236,,,,,,,236,,,236,236,236,236,236,236', '236,236,,236,236,236,,236,236,,236,236,236,,,,,,,,,,,,,,,,,,,,236,,', '236,,,236,236,,,236,,,,,,236,,,,,,,,236,,,,,236,236,236,236,236,236', ',,,236,236,,,,,,,236,,,236,236,236,,,236,236,237,237,237,,237,,,,237', '237,,,,237,,237,237,237,237,237,237,237,,,,,,237,237,237,237,237,237', '237,,,237,,,,,,,237,,,237,237,237,237,237,237,237,237,,237,237,237,', '237,237,,237,237,237,,,,,,,,,,,,,,,,,,,,237,,,237,,,237,237,,,237,,', ',,,237,,,,,,,,237,,,,,237,237,237,237,237,237,,,,237,237,,,,,,,237,', ',237,237,237,,,237,237,238,238,238,,238,,,,238,238,,,,238,,238,238,238', '238,238,238,238,,,,,,238,238,238,238,238,238,238,,,238,,,,,,,238,,,238', '238,238,238,238,238,238,238,,238,238,238,,238,238,,238,238,238,,,,,', ',,,,,,,,,,,,,,238,,,238,,,238,238,,,238,,,,,,238,,,,,,,,238,,,,,238', '238,238,238,238,238,,,,238,238,,,,,,,238,,,238,238,238,,,238,238,239', '239,239,,239,,,,239,239,,,,239,,239,239,239,239,239,239,239,,,,,,239', '239,239,239,239,239,239,,,239,,,,,,,239,,,239,239,239,239,239,239,239', '239,,239,239,239,,239,239,,239,239,239,,,,,,,,,,,,,,,,,,,,239,,,239', ',,239,239,,,239,,,,,,239,,,,,,,,239,,,,,239,239,239,239,239,239,,,,239', '239,,,,,,,239,,,239,239,239,,,239,239,240,240,240,,240,,,,240,240,,', ',240,,240,240,240,240,240,240,240,,,,,,240,240,240,240,240,240,240,', ',240,,,,,,,240,,,240,240,240,240,240,240,240,240,,240,240,240,,240,240', ',240,240,240,,,,,,,,,,,,,,,,,,,,240,,,240,,,240,240,,,240,,,,,,240,', ',,,,,,240,,,,,240,240,240,240,240,240,,,,240,240,,,,,,,240,,,240,240', '240,,,240,240,241,241,241,,241,,,,241,241,,,,241,,241,241,241,241,241', '241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241,241,241', '241,241,241,241,241,,241,241,241,,241,241,,241,241,241,,,,,,,,,,,,,', ',,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,241,,,,,241,241,241', '241,241,241,,,,241,241,,,,,,,241,,,241,241,241,,,241,241,242,242,242', ',242,,,,242,242,,,,242,,242,242,242,242,242,242,242,,,,,,242,242,242', '242,242,242,242,,,242,,,,,,,242,,,242,242,242,242,242,242,242,242,,242', '242,242,,242,242,,242,242,242,,,,,,,,,,,,,,,,,,,,242,,,242,,,242,242', ',,242,,,,,,242,,,,,,,,242,,,,,242,242,242,242,242,242,,,,242,242,,,', ',,,242,,,242,242,242,,,242,242,243,243,243,,243,,,,243,243,,,,243,,243', '243,243,243,243,243,243,,,,,,243,243,243,243,243,243,243,,,243,,,,,', ',243,,,243,243,243,243,243,243,243,243,,243,243,243,,243,243,,243,243', '243,,,,,,,,,,,,,,,,,,,,243,,,243,,,243,243,,,243,,,,,,243,,,,,,,,243', ',,,,243,243,243,243,243,243,,,,243,243,,,,,,,243,,,243,243,243,,,243', '243,244,244,244,,244,,,,244,244,,,,244,,244,244,244,244,244,244,244', ',,,,,244,244,244,244,244,244,244,,,244,,,,,,,244,,,244,244,244,244,244', '244,244,244,,244,244,244,,244,244,,244,244,244,,,,,,,,,,,,,,,,,,,,244', ',,244,,,244,244,,,244,,,,,,244,,,,,,,,244,,,,,244,244,244,244,244,244', ',,,244,244,,,,,,,244,,,244,244,244,,,244,244,245,245,245,,245,,,,245', '245,,,,245,,245,245,245,245,245,245,245,,,,,,245,245,245,245,245,245', '245,,,245,,,,,,,245,,,245,245,245,245,245,245,245,245,,245,245,245,', '245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245,,,245,,,245,245,,,245,,', ',,,245,,,,,,,,245,,,,,245,245,245,245,245,245,,,,245,245,,,,,,,245,', ',245,245,245,,,245,245,246,246,246,,246,,,,246,246,,,,246,,246,246,246', '246,246,246,246,,,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246', '246,246,246,246,246,246,246,,246,246,246,,246,246,,246,246,246,,,,,', ',,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,,,,,246,,,,,,,,246,,,,,246', '246,246,246,246,246,,,,246,246,,,,,,,246,,,246,246,246,,,246,246,247', '247,247,,247,,,,247,247,,,,247,,247,247,247,247,247,247,247,,,,,,247', '247,247,247,247,247,247,,,247,,,,,,,247,,,247,247,247,247,247,247,247', '247,,247,247,247,,247,247,,247,247,247,,,,,,,,,,,,,,,,,,,,247,,,247', ',,247,247,,,247,,,,,,247,,,,,,,,247,,,,,247,247,247,247,247,247,,,,247', '247,,,,,,,247,,,247,247,247,,,247,247,248,248,248,,248,,,,248,248,,', ',248,,248,248,248,248,248,248,248,,,,,,248,248,248,248,248,248,248,', ',248,,,,,,,248,,,248,248,248,248,248,248,248,248,,248,248,248,,248,248', ',248,248,248,,,,,,,,,,,,,,,,,,,,248,,,248,,,248,248,,,248,,,,,,248,', ',,,,,,248,,,,,248,248,248,248,248,248,,,,248,248,,,,,,,248,,,248,248', '248,,,248,248,249,249,249,,249,,,,249,249,,,,249,,249,249,249,249,249', '249,249,,,,,,249,249,249,249,249,249,249,,,249,,,,,,,249,,,249,249,249', '249,249,249,249,249,,249,249,249,,249,249,,249,249,249,,,,,,,,,,,,,', ',,,,,,249,,,249,,,249,249,,,249,,,,,,249,,,,,,,,249,,,,,249,249,249', '249,249,249,,,,249,249,,,,,,,249,,,249,249,249,,,249,249,250,250,250', ',250,,,,250,250,,,,250,,250,250,250,250,250,250,250,,,,,,250,250,250', '250,250,250,250,,,250,,,,,,,250,,,250,250,250,250,250,250,250,250,,250', '250,250,,250,250,,250,250,250,,,,,,,,,,,,,,,,,,,,250,,,250,,,250,250', ',,250,,,,,,250,,,,,,,,250,,,,,250,250,250,250,250,250,,,,250,250,,,', ',,,250,,,250,250,250,,,250,250,251,251,251,,251,,,,251,251,,,,251,,251', '251,251,251,251,251,251,,,,,,251,251,251,251,251,251,251,,,251,,,,,', ',251,,,251,251,251,251,251,251,251,251,,251,251,251,,251,251,,251,251', '251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251,251,,,251,,,,,,251,,,,,,,,251', ',,,,251,251,251,251,251,251,,,,251,251,,,,,,,251,,,251,251,251,,,251', '251,252,252,252,,252,,,,252,252,,,,252,,252,252,252,252,252,252,252', ',,,,,252,252,252,252,252,252,252,,,252,,,,,,,252,,,252,252,252,252,252', '252,252,252,,252,252,252,,252,252,,252,252,252,,,,,,,,,,,,,,,,,,,,252', ',,252,,,252,252,,,252,,,,,,252,,,,,,,,252,,,,,252,252,252,252,252,252', ',,,252,252,,,,,,,252,,,252,252,252,,,252,252,253,253,253,,253,,,,253', '253,,,,253,,253,253,253,253,253,253,253,,,,,,253,253,253,253,253,253', '253,,,253,,,,,,,253,,,253,253,253,253,253,253,253,253,,253,253,253,', '253,253,,253,253,253,,,,,,,,,,,,,,,,,,,,253,,,253,,,253,253,,,253,,', ',,,253,,,,,,,,253,,,,,253,253,253,253,253,253,,,,253,253,,,,,,,253,', ',253,253,253,,,253,253,254,254,254,,254,,,,254,254,,,,254,,254,254,254', '254,254,254,254,,,,,,254,254,254,254,254,254,254,,,254,,,,,,,254,,,254', '254,254,254,254,254,254,254,,254,254,254,,254,254,,254,254,254,,,,,', ',,,,,,,,,,,,,,254,,,254,,,254,254,,,254,,,,,,254,,,,,,,,254,,,,,254', '254,254,254,254,254,,,,254,254,,,,,,,254,,,254,254,254,,,254,254,255', '255,255,,255,,,,255,255,,,,255,,255,255,255,255,255,255,255,,,,,,255', '255,255,255,255,255,255,,,255,,,,,,,255,,,255,255,255,255,255,255,255', '255,,255,255,255,,255,255,,255,255,255,,,,,,,,,,,,,,,,,,,,255,,,255', ',,255,255,,,255,,,,,,255,,,,,,,,255,,,,,255,255,255,255,255,255,,,,255', '255,,,,,,,255,,,255,255,255,,,255,255,256,256,256,,256,,,,256,256,,', ',256,,256,256,256,256,256,256,256,,,,,,256,256,256,256,256,256,256,', ',256,,,,,,,256,,,256,256,256,256,256,256,256,256,,256,256,256,,256,256', ',256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,256,,,256,,,,,,256,', ',,,,,,256,,,,,256,256,256,256,256,256,,,,256,256,,,,,,,256,,,256,256', '256,,,256,256,258,258,258,,258,,,,258,258,,,,258,,258,258,258,258,258', '258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,,,258,,,258,258,258', '258,258,258,258,258,,258,258,258,,258,258,,258,258,258,,,,,,,,,,,,,', ',,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,258,,,,,258,258,258', '258,258,258,,,,258,258,,,,,,,258,,,258,258,258,,,258,258,259,259,259', ',259,,,,259,259,,,,259,,259,259,259,259,259,259,259,,,,,,259,259,259', '259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259,259,259,259,,259', '259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259,,,259,259', ',,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259,,,,259,259,,,', ',,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260,260,,,,260,,260', '260,260,260,260,260,260,,,,,,260,260,260,260,260,260,260,,,260,,,,,', ',260,,,260,260,260,260,260,260,260,260,,260,260,260,,260,260,,260,260', '260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,,,,,260,,,,,,,,260', ',,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,,,260,260,260,,,260', '260,261,261,261,,261,,,,261,261,,,,261,,261,261,261,261,261,261,261', ',,,,,261,261,261,261,261,261,261,,,261,,,,,,,261,,,261,261,261,261,261', '261,261,261,,261,261,261,,261,261,,261,261,261,,,,,,,,,,,,,,,,,,,,261', ',,261,,,261,261,,,261,,,,,,261,,,,,,,,261,,,,,261,261,261,261,261,261', ',,,261,261,,,,,,,261,,,261,261,261,,,261,261,794,794,794,,794,,,,794', '794,,,,794,,794,794,794,794,794,794,794,,,,,,794,794,794,794,794,794', '794,,,794,,,,,,,794,,,794,794,794,794,794,794,794,794,,794,794,794,', '794,794,,794,794,794,,,,,,,,,,,,,,,,,,,,794,,,794,,,794,794,,,794,,', ',,,794,,,,,,,,794,,,,,794,794,794,794,794,794,,,,794,794,,,,,,,794,', ',794,794,794,,,794,794,793,793,793,,793,,,,793,793,,,,793,,793,793,793', '793,793,793,793,,,,,,793,793,793,793,793,793,793,,,793,,,,,,,793,,,793', '793,793,793,793,793,793,793,,793,793,793,,793,793,,793,793,793,,,,,', ',,,,,,,,,,,,,,793,,,793,,,793,793,,,793,,,,,,793,,,,,,,,793,,,,,793', '793,793,793,793,793,,,,793,793,,,,,,,793,,,793,793,793,,,793,793,268', '268,268,,268,,,,268,268,,,,268,,268,268,268,268,268,268,268,,,,,,268', '268,268,268,268,268,268,,,268,,,,,,,268,,,268,268,268,268,268,268,268', '268,268,268,268,268,,268,268,,268,268,268,,,,,,,,,,,,,,,,,,,,268,,,268', ',,268,268,,,268,,268,,268,,268,,,,,,,,268,,,,,268,268,268,268,268,268', ',,,268,268,,,,,,,268,,268,268,268,268,,,268,268,792,792,792,,792,,,', '792,792,,,,792,,792,792,792,792,792,792,792,,,,,,792,792,792,792,792', '792,792,,,792,,,,,,,792,,,792,792,792,792,792,792,792,792,,792,792,792', ',792,792,,792,792,792,,,,,,,,,,,,,,,,,,,,792,,,792,,,792,792,,,792,', ',,,,792,,,,,,,,792,,,,,792,792,792,792,792,792,,,,792,792,,,,,,,792', ',,792,792,792,,,792,792,274,274,274,,274,,,,274,274,,,,274,,274,274', '274,274,274,274,274,,,,,,274,274,274,274,274,274,274,,,274,,,,,,,274', ',,274,274,274,274,274,274,274,274,274,274,274,274,,274,274,,274,274', '274,,,,,,,,,,,,,,,,,,,,274,,,274,,,274,274,,,274,,274,,274,,274,,,,', ',,,274,,,,,274,274,274,274,274,274,,,,274,274,,,,,,,274,,274,274,274', '274,,,274,274,277,277,277,,277,,,,277,277,,,,277,,277,277,277,277,277', '277,277,,,,,,277,277,277,277,277,277,277,,,277,,,,,,,277,,,277,277,277', '277,277,277,277,277,277,277,277,277,,277,277,,277,277,277,,,,,,,,,,', ',,,,,,,,,277,,,277,,,277,277,,,277,,277,,277,,277,,,,,,,,277,,,,,277', '277,277,277,277,277,,,,277,277,277,,,,,,277,,277,277,277,277,,,277,277', '791,791,791,,791,,,,791,791,,,,791,,791,791,791,791,791,791,791,,,,', ',791,791,791,791,791,791,791,,,791,,,,,,,791,,,791,791,791,791,791,791', '791,791,,791,791,791,,791,791,,791,791,791,,,,,,,,,,,,,,,,,,,,791,,', '791,,,791,791,,,791,,,,,,791,,,,,,,,791,,,,,791,791,791,791,791,791', ',,,791,791,,,,,,,791,,,791,791,791,,,791,791,777,777,777,,777,,,,777', '777,,,,777,,777,777,777,777,777,777,777,,,,,,777,777,777,777,777,777', '777,,,777,,,,,,,777,,,777,777,777,777,777,777,777,777,,777,777,777,', '777,777,,777,777,777,,,,,,,,,,,,,,,,,,,,777,,,777,,,777,777,,,777,,', ',,,777,,,,,,,,777,,,,,777,777,777,777,777,777,,,,777,777,,,,,,,777,', ',777,777,777,,,777,777,775,775,775,,775,,,,775,775,,,,775,,775,775,775', '775,775,775,775,,,,,,775,775,775,775,775,775,775,,,775,,,,,,,775,,,775', '775,775,775,775,775,775,775,,775,775,775,,775,775,,775,775,775,,,,,', ',,,,,,,,,,,,,,775,,,775,,,775,775,,,775,,,,,,775,,,,,,,,775,,,,,775', '775,775,775,775,775,,,,775,775,,,,,,,775,,,775,775,775,,,775,775,284', '284,284,,284,,,,284,284,,,,284,,284,284,284,284,284,284,284,,,,,,284', '284,284,284,284,284,284,,,284,,,,,,,284,,,284,284,284,284,284,284,284', '284,,284,284,284,,284,284,,284,284,284,,,,,,,,,,,,,,,,,,,,284,,,284', ',,284,284,,,284,,,,,,284,,,,,,,,284,,,,,284,284,284,284,284,284,,,,284', '284,,,,,,,284,,,284,284,284,,,284,284,286,286,286,,286,,,,286,286,,', ',286,,286,286,286,286,286,286,286,,,,,,286,286,286,286,286,286,286,', ',286,,,,,,,286,,,286,286,286,286,286,286,286,286,,286,286,286,,286,286', ',286,286,286,,,,,,,,,,,,,,,,,,,,286,,,286,,,286,286,,,286,,,,,,286,', ',,,,,,286,,,,,286,286,286,286,286,286,,,,286,286,,,,,,,286,,,286,286', '286,,,286,286,288,288,288,,288,,,,288,288,,,,288,,288,288,288,288,288', '288,288,,,,,,288,288,288,288,288,288,288,,,288,,,,,,,288,,,288,288,288', '288,288,288,288,288,,288,288,288,,288,288,,288,288,288,,,,,,,,,,,,,', ',,,,,,288,,,288,,,288,288,,,288,,,,,,288,,,,,,,,288,,,,,288,288,288', '288,288,288,,,,288,288,,,,,,,288,,,288,288,288,,,288,288,291,291,291', ',291,,,,291,291,,,,291,,291,291,291,291,291,291,291,,,,,,291,291,291', '291,291,291,291,,,291,,,,,,,291,,,291,291,291,291,291,291,291,291,,291', '291,291,,291,291,,291,291,291,,,,,,,,,,,,,,,,,,,,291,,,291,,,291,291', ',,291,,,,,,291,,,,,,,,291,,,,,291,291,291,291,291,291,,,,291,291,,,', ',,,291,,,291,291,291,,,291,291,297,297,297,297,297,,,,297,297,,,,297', ',297,297,297,297,297,297,297,,,,,,297,297,297,297,297,297,297,,,297', ',,,,,297,297,,297,297,297,297,297,297,297,297,297,,297,297,297,,297', '297,,297,297,297,,,,,,,,,,,,,,,,,,,,297,,,297,,,297,297,,,297,,297,', ',,297,,,,,,,,297,,,,,297,297,297,297,297,297,,,,297,297,,,,,,,297,,', '297,297,297,,,297,297,753,753,753,,753,,,,753,753,,,,753,,753,753,753', '753,753,753,753,,,,,,753,753,753,753,753,753,753,,,753,,,,,,,753,,,753', '753,753,753,753,753,753,753,753,753,753,753,,753,753,,753,753,753,,', ',,,,,,,,,,,,,,,,,753,,,753,,,753,753,,,753,,753,,753,,753,,,,,,,,753', ',,,,753,753,753,753,753,753,,,,753,753,,,,,,,753,,753,753,753,753,,', '753,753,747,747,747,,747,,,,747,747,,,,747,,747,747,747,747,747,747', '747,,,,,,747,747,747,747,747,747,747,,,747,,,,,,,747,,,747,747,747,747', '747,747,747,747,,747,747,747,,747,747,,747,747,747,,,,,,,,,,,,,,,,,', ',,747,,,747,,,747,747,,,747,,,,,,747,,,,,,,,747,,,,,747,747,747,747', '747,747,,,,747,747,,,,,,,747,,,747,747,747,,,747,747,303,303,303,,303', ',,,303,303,,,,303,,303,303,303,303,303,303,303,,,,,,303,303,303,303', '303,303,303,,,303,,,,,,,303,,,303,303,303,303,303,303,303,303,,303,303', '303,,303,303,,,,303,,,,,,,,,,,,,,,,,,,,303,,,303,,,303,303,,,303,,,', ',,,,,,,,,,,,,,,303,303,303,303,303,303,,,,303,303,,,,303,,,303,,,303', '303,303,,,303,303,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91', '91,91,91,91,91,91,91,,,,91,91,91,91,91,91,91,91,91,91,,,,,,91,91,91', '91,91,91,91,91,91,91,91,91,,91,,,,,,,91,91,,91,91,91,91,91,91,91,,,91', '91,,,,91,91,91,91,,,,,,,,,,,,,,91,91,,91,91,91,91,91,91,91,91,91,91', '91,,,91,,,,,,,,,,,,,,,,,,,,91,12,12,12,12,12,12,12,12,12,12,12,12,12', '12,12,12,12,12,12,12,12,12,12,12,,,,12,12,12,12,12,12,12,12,12,12,,', ',,,12,12,12,12,12,12,12,12,12,,,12,,,,,,,,,12,12,,12,12,12,12,12,12', '12,,,12,12,,,,12,12,12,12,,,,,,,,,,,,,,12,12,,12,12,12,12,12,12,12,12', '12,12,12,,,12,12,,,,,,,,,,12,,,,,,,,,12,74,74,74,74,74,74,74,74,74,74', '74,74,74,74,74,74,74,74,74,74,74,74,74,74,,,,74,74,74,74,74,74,74,74', '74,74,,,,,,74,74,74,74,74,74,74,74,74,74,74,74,,74,,,,,,,74,74,,74,74', '74,74,74,74,74,,,74,74,,,,74,74,74,74,,,,,,74,,,,,,,,74,74,,74,74,74', '74,74,74,74,74,74,74,74,,,74,,,,,,,,,,,,,,,,,,,,74,763,763,763,763,763', '763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763', '763,763,,,,763,763,763,763,763,763,763,763,763,763,,,,,,763,763,763', '763,763,763,763,763,763,,,763,,,,,,,,,763,763,,763,763,763,763,763,763', '763,,,763,763,,,,763,763,763,763,,,,,,,,,,,,,,763,763,,763,763,763,763', '763,763,763,763,763,763,763,,,763,,,,,,,,,,,,,,,,,,,,763,634,634,634', '634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634', '634,634,634,634,,,,634,634,634,634,634,634,634,634,634,634,,,,,,634', '634,634,634,634,634,634,634,634,,,634,,,,,,,,,634,634,,634,634,634,634', '634,634,634,,,634,634,,,,634,634,634,634,,,,,,,,,,,,,,634,634,,634,634', '634,634,634,634,634,634,634,634,634,,,634,634,,,,,,,,,,634,,,,,,,,,634', '11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11', '11,,,,11,11,11,11,11,11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11', '11,,11,,,,,,,,,11,11,,11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,', ',,,,,,,,,,,11,11,,11,11,11,11,11,11,11,11,11,11,11,,,11,11,,,,,,,,,', '11,,,,,,,,,11,408,408,408,408,408,408,408,408,408,408,408,408,408,408', '408,408,408,408,408,408,408,408,408,408,,,,408,408,408,408,408,408,408', '408,408,408,,,,,,408,408,408,408,408,408,408,408,408,,,408,,,,,,,,,408', '408,,408,408,408,408,408,408,408,,,408,408,,,,408,408,408,408,,,,,,', ',,,,,,,408,408,,408,408,408,408,408,408,408,408,408,408,408,,,408,408', ',,,487,,,,,,408,487,487,487,,,487,487,487,408,487,,,,,,,,,487,487,,', ',,,,,,,487,487,,487,487,487,487,487,,,,,,,,264,264,,,264,,,,,,,,,264', '264,,264,264,264,264,264,264,264,,,264,264,487,,,264,264,264,264,487', ',,,,487,487,,,,,,,264,264,,264,264,264,264,264,264,264,264,264,264,264', '487,487,264,,,,,1017,1017,,,1017,,,487,,,,,487,1017,1017,264,1017,1017', '1017,1017,1017,1017,1017,,,1017,1017,,,,1017,1017,1017,1017,,,,,,1017', ',,,,,,,1017,1017,,1017,1017,1017,1017,1017,1017,1017,1017,1017,1017', '1017,,,1017,,,,,453,453,,,453,,,,,,,,,453,453,1017,453,453,453,453,453', '453,453,,,453,453,,,,453,453,453,453,,,,,,453,,,,,,,,453,453,,453,453', '453,453,453,453,453,453,453,453,453,,,453,,,,,1016,1016,,,1016,,,,,', ',,,1016,1016,453,1016,1016,1016,1016,1016,1016,1016,,,1016,1016,,,,1016', '1016,1016,1016,,,,,,1016,,,,,,,,1016,1016,,1016,1016,1016,1016,1016', '1016,1016,1016,1016,1016,1016,,,1016,,,,,454,454,,,454,,,,,,,,,454,454', '1016,454,454,454,454,454,454,454,,,454,454,,,,454,454,454,454,,,,,,454', ',,,,,,,454,454,,454,454,454,454,454,454,454,454,454,454,454,,1002,454', '1002,1002,1002,1002,1002,1000,,1000,1000,1000,1000,1000,,,1002,,,,,454', ',1000,,,,,,,,,,,,,,,1002,,,,,,,1000,,967,967,1002,1002,967,,,1000,1000', '1000,1000,,,967,967,,967,967,967,967,967,967,967,,,967,967,,,,967,967', '967,967,,,1002,,,967,,,,1000,,,,967,967,,967,967,967,967,967,967,967', '967,967,967,967,,,967,,,,,522,522,,,522,,,,,,,,,522,522,967,522,522', '522,522,522,522,522,,,522,522,,,,522,522,522,522,,,,,,522,,,,,,,,522', '522,,522,522,522,522,522,522,522,522,522,522,522,,,522,,,,,523,523,', ',523,,,,,,,,,523,523,522,523,523,523,523,523,523,523,,,523,523,,,,523', '523,523,523,,,,,,523,,,,,,,,523,523,,523,523,523,523,523,523,523,523', '523,523,523,,950,523,950,950,950,950,950,,,,,,,,,,950,,,,,523,,,,,,', ',,,,,,,,,,950,950,532,532,,,532,,,950,950,950,950,,,532,532,,532,532', '532,532,532,532,532,,,532,532,,,,532,532,532,532,,,,,,532,,,,950,,,', '532,532,,532,532,532,532,532,532,532,532,532,532,532,,,532,,,,,533,533', ',,533,,,,,,,,,533,533,532,533,533,533,533,533,533,533,,,533,533,,,,533', '533,533,533,,,,,,533,,,,,,,,533,533,,533,533,533,533,533,533,533,533', '533,533,533,,927,533,927,927,927,927,927,925,,925,925,925,925,925,,', '927,,,,,533,,925,923,,923,923,923,923,923,921,,921,921,921,921,921,927', ',923,,,,,925,,921,,927,927,,,,,,925,925,,,,551,923,551,551,551,551,551', ',921,,,,923,923,,,551,921,921,921,921,898,927,898,898,898,898,898,896', '925,896,896,896,896,896,,,898,551,,,,,,896,,923,551,551,551,551,,893', '921,893,893,893,893,893,898,,,,,,,896,,893,,898,898,,,,896,896,896,896', ',,,,551,,,,,,,893,,,,,,,,,893,893,893,893,,898,,213,213,,,213,896,,', ',,,,,213,213,,213,213,213,213,213,213,213,,,213,213,,,893,213,213,213', '213,,,,,,213,,,,,,,,213,213,,213,213,213,213,213,213,213,213,213,213', '213,,,213,,,,,214,214,,,214,,,,,,,,,214,214,213,214,214,214,214,214', '214,214,,,214,214,,,,214,214,214,214,,,,,,214,,,,,,,,214,214,,214,214', '214,214,214,214,214,214,214,214,214,,,214,,,,,593,593,,,593,,,,,,,,', '593,593,214,593,593,593,593,593,593,593,,,593,593,,,,593,593,593,593', ',,,,,593,,,,,,,,593,593,,593,593,593,593,593,593,593,593,593,593,593', ',,593,,,,,594,594,,,594,,,,,,,,,594,594,593,594,594,594,594,594,594', '594,,,594,594,,,,594,594,594,594,,,,,,594,,,,,,,,594,594,,594,594,594', '594,594,594,594,594,594,594,594,,606,594,606,606,606,606,606,761,,761', '761,761,761,761,,,606,,,,,594,,761,,,,,719,,719,719,719,719,719,,,,606', '606,,,,,719,761,,606,606,606,606,,,,761,761,761,761,,,,,,,,,719,,,,', ',,,,752,752,719,719,752,,,,606,,,,,752,752,761,752,752,752,752,752,752', '752,,,752,752,,,,752,752,752,752,,,719,,,752,,,,,,,,752,752,,752,752', '752,752,752,752,752,752,752,752,752,,,752,,,,,751,751,,,751,,,,,,,,', '751,751,752,751,751,751,751,751,751,751,,,751,751,,,,751,751,751,751', ',,,,,751,,,,,,,,751,751,,751,751,751,751,751,751,751,751,751,751,751', ',340,751,340,340,340,340,340,717,,717,717,717,717,717,,,340,,,,,751', ',717,715,,715,715,715,715,715,,,,,,,,340,340,715,,,,,717,,340,340,340', '340,,,,717,717,717,717,,,,665,715,665,665,665,665,665,,,,715,715,715', '715,,,665,,,,,,340,,,,,,,717,,,,,,,,,665,,,,,,,,715,665,665,665,665', ',,,,,,,,,,,,,,,,,,,,,,,,665,,,,,,,,665' ] racc_action_check = arr = ::Array.new(26642, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_action_pointer = [ nil, 1215, 4534, 1119, nil, 644, nil, nil, 6082, 878, nil, 24807, 24275, 996, nil, 959, 976, 630, 395, 876, 685, nil, -78, 6362, 2560, 952, nil, 295, nil, 196, 928, 1185, 6502, 6642, 6782, nil, 5380, 6922, 7062, nil, 848, 258, 295, 830, 184, 7482, 7622, 7762, 725, 472, nil, nil, nil, nil, nil, nil, nil, nil, nil, 796, nil, -76, 7902, nil, -19, nil, 8042, 8182, nil, nil, 8322, 8462, 757, nil, 24408, nil, nil, nil, nil, nil, -95, nil, nil, nil, nil, nil, nil, 681, 663, 658, 638, 24142, nil, nil, nil, nil, nil, nil, 125, nil, nil, 263, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 9162, nil, nil, nil, nil, 9302, 9442, 9582, 9722, 9862, 648, nil, 634, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 629, nil, 1996, 10002, 10142, 10282, 25975, 26043, nil, nil, 10422, 10562, 10702, 10842, 10982, 11122, nil, nil, 409, 174, 103, 466, -30, 373, 412, nil, 17982, 1714, 211, 18262, 18402, 18542, 18682, 18822, 18962, 19102, 19242, 19382, 19522, 19662, 19802, 19942, 20082, 20222, 20362, 20502, 20642, 20782, 20922, 21062, 5802, 21202, 21342, 21482, 21622, nil, nil, 25059, nil, nil, 200, 22042, nil, 158, nil, nil, nil, 22322, nil, nil, 22462, nil, 3406, nil, 60, -14, nil, 23022, 12, 23162, nil, 23302, nil, -104, 23442, nil, nil, 412, nil, 891, 23582, 1169, 3970, 1183, 1210, 1171, 24002, 3124, 611, 597, 567, 1226, 768, nil, 1140, 1097, -24, nil, nil, nil, 1123, -44, 1026, 11962, nil, -85, 1079, 735, nil, 1073, nil, 12382, 4252, nil, 12522, 1048, nil, 290, 324, 1171, 12942, nil, nil, 26446, 396, 136, 157, 13362, 13502, 497, 1279, 1166, -19, 34, 536, 1247, 164, 1284, nil, nil, 14482, nil, 14622, 624, -54, 595, 605, 666, 626, 603, 326, 628, nil, 181, nil, nil, nil, nil, nil, 696, nil, 595, nil, 535, nil, 693, 465, nil, 738, 460, nil, 766, -28, nil, 771, -33, nil, 299, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 5239, 24940, nil, nil, nil, nil, 867, nil, nil, 895, 16722, 897, nil, nil, 1855, 902, nil, nil, 913, 927, 506, 504, 1442, nil, nil, nil, 533, 0, 1045, nil, nil, 1310, 1053, nil, 3124, nil, 1007, nil, nil, 1573, nil, nil, nil, nil, 237, nil, 25195, 25331, 5942, 177, 17702, 17562, 17422, 4111, 4252, 332, 493, 1051, 1005, 997, 991, 5380, 5521, 5404, 5098, 1001, 1135, 1258, 1392, 5239, 4393, 4534, 4675, 4816, 971, 1200, 3970, 4957, 3547, 210, 25059, nil, nil, nil, nil, nil, nil, 252, 274, 926, 917, nil, nil, 17282, nil, nil, 17142, nil, 17002, nil, 256, nil, 16862, nil, nil, 16582, 1148, 891, 885, nil, nil, 855, 16442, 840, 16302, 25508, 25576, 483, 866, nil, 16162, 769, nil, 16022, 15882, 25678, 25746, 3829, 15742, 875, 868, 526, nil, nil, 15602, nil, nil, 15462, nil, 747, nil, 389, 769, 58, 25869, nil, 721, 716, nil, 712, 701, 699, nil, nil, nil, nil, nil, nil, nil, nil, 677, 892, nil, nil, 15322, nil, nil, nil, 764, nil, nil, nil, 756, nil, nil, 723, 5521, 738, nil, 5662, 55, 181, 731, 694, nil, 15182, 26111, 26179, -5, nil, 340, 232, -21, nil, 749, nil, 9, 15042, nil, 26241, nil, 14902, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 333, nil, nil, 437, nil, nil, nil, 107, nil, nil, 105, nil, 114, nil, 24674, nil, 42, 14762, 14342, 372, 1212, 14202, 14062, 13922, 13782, 1190, nil, nil, nil, 13642, 13222, 1174, nil, 13082, 12802, nil, 136, 138, 401, 658, 1117, 1714, 1075, nil, nil, 26507, nil, nil, 1173, -14, -49, nil, nil, nil, nil, 1013, nil, 1046, 12662, nil, nil, 12242, nil, 1135, -109, 12102, 1014, nil, 1019, 29, 30, 1063, 152, 705, 1078, 1066, 11822, 2701, 1142, 258, 1200, 11682, nil, 1094, 226, nil, nil, nil, 4393, 2278, 1111, 356, nil, nil, 619, 26470, nil, 26453, nil, 26269, nil, 11542, nil, 932, nil, 1143, 407, 1148, nil, nil, nil, nil, 48, nil, 1263, nil, nil, nil, nil, 1269, nil, 11402, 1159, 163, 31, 194, -1, 23862, nil, 569, nil, 26384, 26316, 23722, nil, nil, nil, -93, 632, 4675, 4957, 26248, 269, 24541, 203, 904, 5098, nil, nil, nil, nil, nil, nil, nil, -27, 22882, 1996, 22742, nil, 88, nil, 2278, nil, 2983, nil, nil, 3265, nil, 2137, nil, 3688, 22602, 22182, 21902, 21762, 154, 18122, 182, 184, nil, 199, 274, 276, nil, 356, 341, 360, 349, 17842, nil, nil, 1855, nil, nil, nil, 3547, 3688, nil, nil, nil, 408, 28, nil, nil, 540, nil, 3406, 422, 466, nil, nil, nil, nil, 452, 570, 473, 490, nil, nil, nil, 493, 496, nil, 502, 520, nil, 522, nil, nil, 527, 993, 549, 1194, nil, 730, nil, 11262, 739, 2560, 2419, nil, 16, 21, 189, 441, 500, nil, 651, 4816, 9022, nil, -80, 785, 788, 672, nil, nil, nil, nil, nil, nil, nil, nil, 687, 677, nil, 2842, 8882, 8742, 2419, 455, nil, nil, 25921, nil, nil, 25897, nil, 25890, nil, nil, 722, 1178, 8602, 629, 787, 835, 3829, 734, 840, nil, 3265, nil, nil, 51, 7342, nil, nil, nil, nil, nil, 25839, nil, 25832, nil, 25815, nil, 25808, nil, nil, nil, nil, 394, 1276, 754, nil, 53, nil, 877, 879, 7202, 2137, nil, nil, 887, 183, nil, nil, nil, nil, 25638, nil, 777, nil, nil, 779, 809, 821, 822, nil, 823, nil, 227, nil, nil, nil, 486, 25440, nil, nil, 860, nil, nil, nil, 1573, 54, 80, 303, 927, 118, nil, 859, 862, 863, 865, 880, 1153, 886, 1060, 4111, nil, nil, nil, 33, 2983, nil, nil, 2842, 2701, nil, 25400, nil, 25393, nil, 1373, nil, 1116, nil, nil, nil, 801, 955, 959, nil, 1044, 6222, 25263, 25127, 134, 859, nil, nil, nil, nil, 921, 944, 372, nil, nil, nil, 1074, 1077, 1078, 959, 968, 969, 970, nil, nil, 975, -9, 52, 124, -8, 980, 987, nil, nil, nil, nil, 725, nil, nil, nil, nil, 44, nil, 1034, nil ] racc_action_default = [ -1, -628, -627, -628, -2, -614, -4, -5, -628, -8, -9, -628, -628, -628, -29, -628, -628, -628, -280, -628, -40, -43, -616, -628, -48, -50, -51, -52, -57, -257, -257, -257, -294, -333, -334, -69, -627, -73, -81, -83, -628, -516, -517, -628, -628, -628, -628, -628, -616, -238, -271, -272, -273, -274, -275, -276, -277, -278, -279, -602, -282, -285, -627, -292, -302, -405, -628, -628, -307, -310, -614, -628, -318, -325, -628, -335, -336, -447, -448, -449, -450, -451, -452, -627, -455, -627, -627, -627, -627, -627, -627, -627, -492, -498, -500, -501, -502, -503, -600, -505, -506, -601, -508, -509, -510, -511, -512, -513, -514, -515, -520, -521, 1059, -3, -615, -623, -624, -625, -7, -628, -628, -628, -628, -628, -628, -17, -628, -112, -113, -114, -115, -116, -117, -118, -119, -120, -124, -125, -126, -127, -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, -189, -190, -191, -192, -193, -194, -22, -121, -627, -628, -628, -627, -628, -628, -612, -613, -628, -628, -628, -628, -628, -616, -617, -47, -628, -516, -517, -628, -280, -628, -628, -230, -628, -627, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -628, -411, -414, -628, -610, -611, -58, -628, -301, -628, -428, -431, -64, -627, -425, -65, -616, -66, -239, -252, -627, -627, -256, -628, -262, -628, -627, -492, -593, -616, -628, -67, -68, -614, -13, -14, -628, -71, -627, -616, -628, -74, -77, -627, -89, -90, -628, -628, -97, -294, -297, -616, -418, -333, -334, -337, -426, -628, -79, -628, -85, -290, -499, -628, -215, -216, -231, -628, -627, -284, -628, -628, -240, -620, -620, -628, -627, -303, -304, -548, -49, -628, -628, -628, -628, -614, -628, -615, -516, -517, -628, -628, -280, -628, -358, -359, -628, -321, -628, -112, -113, -154, -155, -156, -172, -177, -184, -187, -328, -628, -516, -517, -588, -589, -453, -628, -476, -628, -478, -628, -480, -628, -628, -460, -628, -628, -466, -628, -628, -472, -628, -628, -474, -628, -491, -493, -494, -495, -496, -6, -626, -23, -24, -25, -26, -27, -627, -628, -19, -20, -21, -122, -628, -30, -39, -267, -628, -628, -266, -31, -197, -616, -247, -248, -627, -627, -603, -604, -257, -423, -605, -606, -604, -603, -257, -422, -424, -605, -606, -37, -205, -38, -628, -41, -42, -195, -262, -44, -45, -46, -616, -300, -628, -628, -627, -290, -628, -628, -628, -206, -207, -208, -209, -210, -211, -212, -213, -217, -218, -219, -220, -221, -222, -223, -224, -225, -226, -227, -228, -229, -232, -233, -234, -235, -616, -627, -257, -603, -604, -54, -59, -258, -419, -627, -627, -616, -616, -296, -253, -628, -261, -254, -628, -259, -628, -263, -628, -598, -628, -599, -12, -615, -16, -616, -70, -288, -86, -75, -628, -616, -627, -628, -628, -96, -628, -499, -628, -82, -87, -628, -628, -628, -628, -236, -628, -439, -628, -286, -618, -241, -622, -621, -243, -622, -291, -628, -591, -620, -628, -628, -548, -408, -587, -587, -531, -533, -533, -533, -547, -549, -550, -551, -552, -553, -554, -555, -556, -628, -558, -560, -562, -567, -569, -570, -572, -577, -579, -580, -582, -583, -584, -628, -627, -349, -350, -627, -628, -628, -628, -628, -434, -627, -628, -628, -290, -315, -107, -108, -628, -110, -628, -280, -628, -628, -326, -548, -330, -628, -454, -477, -482, -483, -485, -456, -479, -457, -481, -458, -459, -628, -462, -464, -628, -465, -468, -469, -628, -470, -471, -628, -497, -628, -18, -628, -28, -270, -628, -628, -427, -628, -249, -251, -628, -628, -60, -245, -246, -420, -628, -628, -62, -421, -628, -628, -299, -603, -604, -603, -604, -616, -195, -628, -394, -395, -616, -397, -412, -53, -415, -627, -429, -432, -244, -295, -627, -260, -264, -628, -594, -595, -628, -596, -15, -72, -628, -78, -84, -616, -603, -604, -627, -607, -95, -628, -80, -628, -204, -214, -616, -627, -627, -283, -616, -620, -293, -592, -406, -627, -627, -616, -628, -529, -530, -628, -628, -540, -628, -543, -628, -545, -628, -360, -628, -362, -364, -371, -616, -561, -571, -581, -585, -627, -351, -627, -308, -352, -353, -311, -628, -314, -628, -616, -603, -604, -607, -289, -628, -107, -108, -109, -628, -628, -627, -319, -522, -523, -628, -322, -627, -627, -548, -628, -628, -616, -628, -627, -461, -463, -467, -473, -475, -10, -123, -268, -628, -198, -628, -619, -627, -33, -200, -34, -201, -61, -35, -203, -36, -202, -63, -196, -628, -628, -628, -628, -427, -628, -587, -587, -376, -627, -627, -627, -393, -628, -616, -399, -556, -564, -565, -575, -627, -417, -416, -55, -627, -627, -255, -265, -597, -76, -427, -88, -298, -627, -356, -627, -440, -627, -441, -442, -287, -242, -628, -628, -616, -587, -568, -586, -532, -533, -533, -559, -533, -533, -578, -533, -556, -573, -616, -628, -369, -628, -557, -628, -354, -628, -628, -627, -627, -313, -628, -427, -628, -107, -108, -111, -616, -627, -628, -525, -628, -628, -628, -616, -527, -331, -590, -484, -487, -488, -489, -490, -628, -269, -32, -199, -250, -628, -237, -628, -374, -375, -384, -378, -386, -628, -389, -628, -391, -396, -628, -628, -628, -563, -628, -628, -627, -628, -628, -11, -627, -446, -357, -628, -628, -444, -409, -410, -407, -528, -628, -536, -628, -538, -628, -541, -628, -544, -546, -361, -363, -367, -628, -372, -305, -628, -306, -628, -628, -628, -627, -316, -427, -628, -628, -323, -327, -329, -526, -548, -486, -587, -566, -377, -627, -627, -627, -627, -576, -627, -398, -616, -401, -403, -404, -574, -628, -290, -413, -628, -430, -433, -445, -627, -516, -517, -628, -628, -280, -443, -533, -533, -533, -533, -365, -628, -370, -628, -627, -309, -312, -264, -627, -627, -320, -524, -627, -627, -373, -628, -381, -628, -383, -628, -387, -628, -390, -392, -400, -628, -289, -607, -56, -439, -627, -628, -628, -290, -628, -534, -537, -539, -542, -628, -368, -627, -435, -436, -437, -628, -628, -628, -627, -627, -627, -627, -402, -438, -616, -603, -604, -607, -289, -533, -366, -355, -317, -324, -332, -628, -379, -382, -385, -388, -427, -535, -627, -380 ] clist = [ '6,422,338,221,700,590,280,280,280,263,583,586,445,133,133,567,130,130', '369,302,275,528,330,316,316,4,213,502,224,328,559,281,281,281,419,396', '117,491,323,341,341,760,442,341,552,264,429,435,537,135,135,125,208', '376,801,676,854,316,676,319,333,334,842,496,540,543,16,113,679,342,343', '824,16,346,965,639,931,114,934,130,845,377,963,379,381,384,387,390,393', '379,727,298,341,341,341,341,130,487,722,300,16,117,750,994,959,857,282', '282,282,679,357,667,29,735,738,267,273,276,29,671,672,118,402,403,404', '405,868,620,804,615,623,617,347,29,621,378,335,621,603,604,605,394,29', '29,29,615,29,871,802,997,359,759,712,713,606,278,292,293,763,987,950', '336,803,634,907,805,670,962,550,707,340,502,408,835,415,486,29,29,16', '811,29,494,965,452,815,495,280,16,816,1027,1037,741,448,449,450,451', '676,676,841,828,843,914,375,430,380,383,1,679,959,418,423,386,1025,389', '931,414,420,418,392,439,686,878,440,444,29,765,567,400,695,29,29,29', '29,29,453,766,395,9,498,869,842,559,280,9,660,849,356,739,280,207,1045', '280,840,722,866,710,851,507,910,124,493,515,837,953,608,339,2,281,901', '546,354,509,423,16,842,754,281,373,706,501,501,567,955,669,845,377,429', '435,370,316,329,331,703,525,337,814,559,344,16,858,345,859,529,747,538', ',316,275,,,688,,526,795,,,522,341,341,29,29,29,29,,518,117,,29,29,29', '29,29,29,532,,547,,,,,807,821,282,316,29,316,,587,588,9,1046,282,,842', '298,691,511,,406,298,593,16,514,16,1028,691,512,520,16,,,768,,,768,', '956,117,29,957,722,742,722,,29,998,820,29,607,942,567,492,567,16,301', '862,891,892,,,497,,808,640,981,6,,29,589,29,133,548,655,130,29,784,', ',,647,817,789,,501,501,652,691,646,,280,632,,,,832,920,567,,,29,,29', '676,430,,,135,445,633,,,559,679,423,29,29,,673,674,439,,,985,722,,874', '662,,,,,16,,,,684,,647,872,873,,687,1038,1033,663,646,,,,,,,663,663', ',280,,,,,,529,,,,316,,,699,529,,,430,316,,645,722,29,722,423,943,651', '430,,817,829,,,439,941,,,513,,,,,,439,,,,867,,,,,,,,,999,,,722,,716', '718,720,,,,,,,29,280,413,807,,,807,,668,675,,16,758,,,,764,974,430,', '691,,944,,,423,,301,,,,567,,,439,,,,,989,,,813,,,,,,,,704,,,736,736', ',,29,,,567,,808,,,808,29,,808,755,808,133,,,130,559,640,9,,,29,806,16', '780,782,16,1029,812,,785,787,,301,444,,823,,301,,831,,,529,663,640,', '316,135,501,773,807,,,822,,,647,316,,652,,,,853,646,,806,1055,29,,,29', ',825,830,418,,29,,,,,876,,,,,,,29,779,1031,1032,29,,341,,,640,,877,', '280,,,825,,825,,,,,808,,808,861,808,430,808,,,,683,,,863,423,,29,29', ',439,,,29,29,,,29,,,,,130,,,,16,16,,,,501,,,,,885,19,,,806,808,870,19', ',,,875,316,,919,,894,894,894,,,,1039,,,,,,930,,,,,,,19,29,29,,,912,16', '16,,916,,,341,16,,,,,949,,,,,922,924,341,926,928,,929,,640,691,,,355', ',,,,29,,936,,798,,29,,,,,,29,29,,945,,,16,29,,,16,16,,,,,,,29,,316,16', ',,,736,19,,800,,,,316,946,,19,,,836,,,,,,,,,,,,,,29,16,16,,29,29,,,17', ',,16,,,17,29,,,,,732,,1009,734,,,,,844,225,846,,894,894,894,894,,894', '225,225,225,,17,307,307,29,,29,29,,16,439,,,16,996,,29,29,,1020,1021', '1022,1023,,1016,,,280,19,825,,225,225,,,225,351,443,,41,,,,16,430,41', ',,,,,423,,19,,29,,,640,29,439,,825,,,,,,,894,894,894,894,41,305,305', '16,,,17,,,1056,,225,225,225,225,17,29,799,16,,894,,,16,,,16,16,,,,833', '834,,,349,,,371,,,,,19,,19,,,,29,19,952,,,798,,,798,,798,,,,838,29,', '838,,,29,,,29,29,,19,,,41,,,,,,,,,41,,883,29,,,958,,960,,,,,,17,225', '225,225,,,,,225,225,225,225,225,225,,,,982,,983,,984,,,,17,,,,895,897', '899,,906,,,,908,909,,,,,,,,,,913,,,,19,,,,,,,225,798,,798,,798,225,798', ',225,,42,,41,,,,42,,,,938,939,,,,,,,17,,17,,,,307,17,1034,41,1035,,1036', ',,,42,306,306,,,,798,307,,,,1044,,,,,17,,225,,,,,,,970,,,,973,,225,225', ',,350,,838,372,,799,,1057,799,601,799,601,,,,,,,19,,,41,,41,993,,,305', '41,,,,18,,,,,,18,,,,,42,305,1001,1003,1005,1007,,1008,,42,41,416,,,1014', ',17,,,447,,,,18,309,309,,,,1026,,,,,1030,,,,371,,371,,,,,,19,,,19,,', ',,,,,,353,,,,,,225,,,,,799,,799,,799,,799,,,,,1051,1052,1053,1054,,504', ',506,41,508,,,510,,,42,,,,,,18,,,1058,,,,,,18,,,,,,443,,,799,42,17,', ',,,,,307,,225,,,,,,307,,549,,,,,,225,,,,,,,,,,,,,,,,,,,,,,,,,,,19,19', ',,,,,,,,,,42,,42,,,,306,42,,17,41,,17,18,,,,305,225,,,,,306,,305,,,', ',225,,42,,225,636,,,18,19,19,,,,,,19,,,,,,,,,,,,,,372,,372,,,,,,,225', '225,,,,,225,225,,,225,,41,,,41,,,,,,,19,,,,19,19,,,,,18,,18,,,19,309', '18,,42,307,,,,,,,677,,,549,307,680,309,,,682,,,,,,18,17,17,,,19,19,', ',,,,,,,19,,,,,,,,,,,677,,602,549,602,,,,,,,,,,225,,,,,,225,,,,305,,17', '17,19,,728,,19,17,,305,980,,,,,,,,225,,,41,41,,,,18,,,,42,,,,,,19,306', ',,,,,,,306,,,,904,,,17,,,,17,17,,,,,,,,,,17,,19,774,,41,41,677,549,', ',,41,,,,,19,,,,,19,,,19,19,,,,225,,17,17,42,,,42,,,,,17,225,818,,,819', ',,,,,,371,,,41,,,,41,41,,18,,,827,,,,309,41,,,,,966,,309,,17,,,,17,', '848,,977,,,,,,,,,,,,,,,41,41,,447,,,,,,,41,17,,,,,,,,,,,,,,,,,,,,18', '306,,18,,,884,,,,,,306,17,371,,,,41,,,,41,,42,42,975,,17,,,,,17,,,17', '17,,,,,,,,,,,,,,,41,,225,,,,,,,,,,,,,,,,,,,,,42,42,,,,,,42,,,41,,,,', ',,,,,,,,,,41,,309,,,41,,,41,41,,,,309,,,,,549,,,,,,372,18,18,42,,,,42', '42,,,,,,,,,,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,992,,,42,42,18,18,,,,,882', '18,42,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,372,,,,42,,602,,42,18,232,,976', '18,18,,,,,279,279,279,,,18,,,,,,,,325,326,327,,,,42,,,,,,,,,,,279,,', ',,,,18,18,,,,,,,,,18,,,,,42,,,,,,,,,,,,,,,42,,,,,42,,,42,42,,,,,,602', ',,,18,,,,18,,,,979,,,,,,,,,,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,18,,,,,,,,,,,,,,,18,,,,,18,,,18,18,279,421,279,,,,,441,446', ',,,,,,,,,,,,,,232,,,460,461,462,463,464,465,466,467,468,469,470,471', '472,473,474,475,476,477,478,479,480,481,482,483,484,485,,,,,,,279,,', ',,,279,,,279,,,,,,,279,,279,,279,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,534,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,279,,441,661,421,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279', ',,279,,279,,,,279,,,,,,,,,,,,279,,,,,,,,,697,698,,,,,,,,,,279,,,279', ',,,,,,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,279,776,,,279,279,781,783,,,,,786,788', ',,661,790,,,,,,,,,,,,,,,,,,,,,,,,279,,,279,,,,,,,,,,,,,,,,,,,,279,,', ',,,,,,,,,,,,,,,,,279,,,,,,,,,,,,,,,,,,,,279,,,,,,,,,,,,279,,,,,,,,,', ',,,,,,,,,,,,279,,886,,,,,,,,,,,,,,781,783,788,786,,889,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,279,886,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '279,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,279' ] racc_goto_table = arr = ::Array.new(3110, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '6,25,89,34,13,95,36,36,36,155,92,92,20,64,64,189,61,61,60,53,74,55,51', '68,68,2,27,76,22,34,185,71,71,71,30,60,98,42,67,32,32,99,30,32,154,39', '40,40,10,65,65,17,17,171,144,77,93,68,77,54,6,71,190,25,72,72,23,5,200', '19,19,14,23,19,150,26,132,8,135,61,195,6,149,6,6,6,6,6,6,6,134,49,32', '32,32,32,61,40,133,50,23,98,58,110,196,14,73,73,73,200,111,43,44,94', '94,41,41,41,44,43,43,7,19,19,19,19,112,175,147,176,175,176,5,44,176', '172,73,176,59,113,59,172,44,44,44,176,44,114,145,115,116,117,139,139', '118,48,48,48,119,135,120,70,136,66,46,142,45,148,151,152,153,76,33,147', '31,156,44,44,23,157,44,160,150,51,161,162,36,23,163,164,149,165,32,32', '32,32,77,77,145,166,145,167,170,74,173,174,1,200,196,71,6,177,135,178', '132,22,22,71,179,61,55,180,22,22,44,181,189,7,55,44,44,44,44,44,27,182', '183,9,51,184,190,185,36,9,25,134,21,95,36,18,135,36,188,133,58,154,133', '171,15,11,74,51,192,193,199,91,3,71,147,88,96,34,6,23,190,97,71,87,72', '6,6,189,144,75,195,6,40,40,100,68,101,102,103,34,104,43,185,105,23,106', '107,108,53,109,32,,68,74,,,25,,67,26,,,27,32,32,44,44,44,44,,54,98,', '44,44,44,44,44,44,27,,6,,,,,189,26,73,68,44,68,,19,19,9,93,73,,190,49', '40,5,,9,49,27,23,50,23,14,40,8,50,23,,,176,,,176,,145,98,44,145,133', '25,133,,44,99,55,44,39,94,189,48,189,23,12,26,139,139,,,48,,191,34,145', '6,,44,5,44,64,73,51,61,44,42,,,,74,76,42,,6,6,74,40,6,,36,2,,,,72,139', '189,,,44,,44,77,74,,,65,20,17,,,185,200,6,44,44,,51,51,61,,,133,133', ',154,34,,,,,23,,,,51,,74,10,10,,51,13,145,6,6,,,,,,,6,6,,36,,,,,,53', ',,,68,,,32,53,,,74,68,,41,133,44,133,6,26,41,74,,76,30,,,61,92,,,9,', ',,,,61,,,,25,,,,,,,,,139,,,133,,187,187,187,,,,,,,44,36,12,189,,,189', ',41,73,,23,32,,,,32,92,74,,40,,10,,,6,,12,,,,189,,,61,,,,,92,,,89,,', ',,,,,73,,,98,98,,,44,,,189,,191,,,191,44,,191,98,191,64,,,61,185,34', '9,,,44,34,23,22,22,23,95,155,,22,22,,12,22,,51,,12,,51,,,53,6,34,,68', '65,6,17,189,,,53,,,74,68,,74,,,,51,6,,34,26,44,,,44,,6,6,71,,44,,,,', '60,,,,,,,44,73,10,10,44,,32,,,34,,51,,36,,,6,,6,,,,,191,,191,71,191', '74,191,,,,9,,,19,6,,44,44,,61,,,44,44,,,44,,,,,61,,,,23,23,,,,6,,,,', '22,29,,,34,191,98,29,,,,98,68,,51,,6,6,6,,,,25,,,,,,51,,,,,,,29,44,44', ',,6,23,23,,6,,,32,23,,,,,51,,,,,187,187,32,187,187,,187,,34,40,,,29', ',,,,44,,19,,138,,44,,,,,,44,44,,19,,,23,44,,,23,23,,,,,,,44,,68,23,', ',,98,29,,143,,,,68,98,,29,,,138,,,,,,,,,,,,,,44,23,23,,44,44,,,24,,', '23,,,24,44,,,,,12,,34,12,,,,,143,24,143,,6,6,6,6,,6,24,24,24,,24,24', '24,44,,44,44,,23,61,,,23,98,,44,44,,187,187,187,187,,27,,,36,29,6,,24', '24,,,24,24,29,,56,,,,23,74,56,,,,,,6,,29,,44,,,34,44,61,,6,,,,,,,6,6', '6,6,56,56,56,23,,,24,,,187,,24,24,24,24,24,44,140,23,,6,,,23,,,23,23', ',,,12,12,,,56,,,56,,,,,29,,29,,,,44,29,138,,,138,,,138,,138,,,,140,44', ',140,,,44,,,44,44,,29,,,56,,,,,,,,,56,,12,44,,,143,,143,,,,,,24,24,24', '24,,,,,24,24,24,24,24,24,,,,143,,143,,143,,,,24,,,,141,141,141,,12,', ',,12,12,,,,,,,,,,12,,,,29,,,,,,,24,138,,138,,138,24,138,,24,,57,,56', ',,,57,,,,12,12,,,,,,,24,,24,,,,24,24,143,56,143,,143,,,,57,57,57,,,', '138,24,,,,143,,,,,24,,24,,,,,,,12,,,,12,,24,24,,,57,,140,57,,140,,143', '140,24,140,24,,,,,,,29,,,56,,56,12,,,56,56,,,,28,,,,,,28,,,,,57,56,141', '141,141,141,,141,,57,56,69,,,12,,24,,,69,,,,28,28,28,,,,12,,,,,12,,', ',56,,56,,,,,,29,,,29,,,,,,,,,28,,,,,,24,,,,,140,,140,,140,,140,,,,,141', '141,141,141,,69,,69,56,69,,,69,,,57,,,,,,28,,,141,,,,,,28,,,,,,29,,', '140,57,24,,,,,,,24,,24,,,,,,24,,69,,,,,,24,,,,,,,,,,,,,,,,,,,,,,,,,', ',29,29,,,,,,,,,,,57,,57,,,,57,57,,24,56,,24,28,,,,56,24,,,,,57,,56,', ',,,24,,57,,24,69,,,28,29,29,,,,,,29,,,,,,,,,,,,,,57,,57,,,,,,,24,24', ',,,,24,24,,,24,,56,,,56,,,,,,,29,,,,29,29,,,,,28,,28,,,29,28,28,,57', '24,,,,,,,69,,,69,24,69,28,,,69,,,,,,28,24,24,,,29,29,,,,,,,,,29,,,,', ',,,,,,69,,28,69,28,,,,,,,,,,24,,,,,,24,,,,56,,24,24,29,,69,,29,24,,56', '29,,,,,,,,24,,,56,56,,,,28,,,,57,,,,,,29,57,,,,,,,,57,,,,24,,,24,,,', '24,24,,,,,,,,,,24,,29,69,,56,56,69,69,,,,56,,,,,29,,,,,29,,,29,29,,', ',24,,24,24,57,,,57,,,,,24,24,69,,,69,,,,,,,56,,,56,,,,56,56,,28,,,69', ',,,28,56,,,,,24,,28,,24,,,,24,,69,,24,,,,,,,,,,,,,,,56,56,,69,,,,,,', '56,24,,,,,,,,,,,,,,,,,,,,28,57,,28,,,69,,,,,,57,24,56,,,,56,,,,56,,57', '57,56,,24,,,,,24,,,24,24,,,,,,,,,,,,,,,56,,24,,,,,,,,,,,,,,,,,,,,,57', '57,,,,,,57,,,56,,,,,,,,,,,,,,,56,,28,,,56,,,56,56,,,,28,,,,,69,,,,,', '57,28,28,57,,,,57,57,,,,,,,,,,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,69,,,57', '57,28,28,,,,,28,28,57,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,57,,,,57,,28', ',57,28,35,,57,28,28,,,,,35,35,35,,,28,,,,,,,,35,35,35,,,,57,,,,,,,,', ',,35,,,,,,,28,28,,,,,,,,,28,,,,,57,,,,,,,,,,,,,,,57,,,,,57,,,57,57,', ',,,,28,,,,28,,,,28,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,28,,,,,,,,,,,,,,,28,,,,,28,,,28,28,35,35,35,,,,,35', '35,,,,,,,,,,,,,,,35,,,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35', '35,35,35,35,35,35,35,35,35,35,,,,,,,35,,,,,,35,,,35,,,,,,,35,,35,,35', ',,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,35,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,35,35,35,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,35,,,35,,35,,,,35,,,,,,,,,,,,35,,,,,,,,,35,35', ',,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,35', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,,,35,35,35,35,,,,', '35,35,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,35,', ',,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,35,,,,,,,,,,,', ',,,,,,,,,,35,,35,,,,,,,,,,,,,,35,35,35,35,,35,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ] racc_goto_check = arr = ::Array.new(3110, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_goto_pointer = [ nil, 206, 23, 266, nil, 62, -2, 113, 72, 235, -281, 249, 358, -532, -629, -566, nil, 40, 237, 3, -206, 175, 5, 64, 927, -211, -347, 9, 1305, 781, -176, -36, -27, 47, -19, 2094, -26, nil, nil, 18, -167, 86, -230, -375, 110, -324, -650, nil, 123, 55, 63, -39, nil, -18, 21, -299, 999, 1204, -497, -219, -56, 5, nil, nil, 2, 38, -249, -6, -14, 1119, 99, -1, -270, 74, -10, -204, -255, -445, nil, nil, nil, nil, nil, nil, nil, nil, nil, 203, -68, -62, nil, 200, -332, -676, -474, -342, 199, -328, 31, -565, 214, 230, 230, -246, 231, 229, -436, 231, -437, -293, -839, 38, -628, -219, -611, -797, 77, -454, -215, -449, -716, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, -774, -470, -478, -774, -503, nil, 196, -401, 387, 365, -500, 232, -611, -517, nil, -537, -735, -820, -828, -172, -381, 105, -296, -16, -87, -488, nil, nil, -90, -487, -87, -484, -804, -400, -502, -627, nil, nil, 122, -30, 50, 118, 118, -256, -249, 123, 124, 128, -544, -387, -378, 145, -517, -310, nil, 0, -463, -325, -653, -263, -449, -627, nil, -637, -792, nil, nil, -110, -435 ] racc_goto_default = [ nil, nil, nil, nil, 5, nil, 295, 7, 348, 296, nil, nil, 536, nil, 855, nil, 294, nil, nil, nil, 14, 15, 21, 231, 324, nil, nil, 752, 229, 230, nil, nil, 20, nil, 332, 24, 25, 26, 27, nil, 694, nil, nil, nil, 313, nil, nil, 28, 424, 35, nil, nil, 37, 40, 39, nil, 226, 227, 600, nil, 132, 432, 131, 134, 78, 79, nil, 93, 49, 285, nil, 425, nil, 426, 437, 648, 499, 283, 268, 50, 51, 52, 53, 54, 55, 56, 57, 58, nil, 269, 64, nil, nil, nil, nil, nil, nil, nil, 584, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 724, 566, nil, 725, 954, 797, 554, nil, 555, nil, nil, 556, nil, 558, 664, nil, nil, nil, 564, nil, nil, nil, 762, nil, nil, nil, 436, 270, nil, nil, nil, nil, nil, nil, nil, nil, 77, 80, 82, nil, nil, nil, nil, nil, 610, nil, nil, nil, nil, nil, nil, nil, nil, 839, 553, nil, 557, 847, 569, 571, 572, 809, 575, 576, 810, 579, 582, nil, 289 ] racc_reduce_table = [ 0, 0, :racc_error, 0, 149, :_reduce_1, 2, 147, :_reduce_2, 2, 148, :_reduce_3, 1, 150, :_reduce_none, 1, 150, :_reduce_none, 3, 150, :_reduce_6, 2, 150, :_reduce_none, 1, 153, :_reduce_8, 0, 157, :_reduce_9, 5, 153, :_reduce_10, 4, 156, :_reduce_11, 2, 158, :_reduce_12, 1, 162, :_reduce_none, 1, 162, :_reduce_none, 3, 162, :_reduce_15, 2, 162, :_reduce_16, 0, 179, :_reduce_17, 4, 155, :_reduce_18, 3, 155, :_reduce_19, 3, 155, :_reduce_20, 3, 155, :_reduce_21, 2, 155, :_reduce_22, 3, 155, :_reduce_23, 3, 155, :_reduce_24, 3, 155, :_reduce_25, 3, 155, :_reduce_26, 3, 155, :_reduce_27, 4, 155, :_reduce_28, 1, 155, :_reduce_none, 3, 155, :_reduce_30, 3, 155, :_reduce_31, 6, 155, :_reduce_32, 5, 155, :_reduce_33, 5, 155, :_reduce_34, 5, 155, :_reduce_35, 5, 155, :_reduce_36, 3, 155, :_reduce_37, 3, 155, :_reduce_38, 3, 155, :_reduce_39, 1, 155, :_reduce_none, 3, 166, :_reduce_41, 3, 166, :_reduce_42, 1, 178, :_reduce_none, 3, 178, :_reduce_44, 3, 178, :_reduce_45, 3, 178, :_reduce_46, 2, 178, :_reduce_47, 1, 178, :_reduce_none, 1, 165, :_reduce_49, 1, 168, :_reduce_none, 1, 168, :_reduce_none, 1, 183, :_reduce_none, 4, 183, :_reduce_53, 0, 191, :_reduce_54, 0, 192, :_reduce_55, 6, 188, :_reduce_56, 1, 190, :_reduce_57, 2, 182, :_reduce_58, 3, 182, :_reduce_59, 4, 182, :_reduce_60, 5, 182, :_reduce_61, 4, 182, :_reduce_62, 5, 182, :_reduce_63, 2, 182, :_reduce_64, 2, 182, :_reduce_65, 2, 182, :_reduce_66, 2, 182, :_reduce_67, 2, 182, :_reduce_68, 1, 167, :_reduce_none, 3, 167, :_reduce_70, 1, 196, :_reduce_none, 3, 196, :_reduce_72, 1, 195, :_reduce_73, 2, 195, :_reduce_74, 3, 195, :_reduce_75, 5, 195, :_reduce_76, 2, 195, :_reduce_77, 4, 195, :_reduce_78, 2, 195, :_reduce_79, 4, 195, :_reduce_80, 1, 195, :_reduce_81, 3, 195, :_reduce_82, 1, 199, :_reduce_none, 3, 199, :_reduce_84, 2, 198, :_reduce_85, 3, 198, :_reduce_86, 1, 201, :_reduce_87, 3, 201, :_reduce_88, 1, 200, :_reduce_89, 1, 200, :_reduce_90, 4, 200, :_reduce_91, 3, 200, :_reduce_92, 3, 200, :_reduce_93, 3, 200, :_reduce_94, 3, 200, :_reduce_95, 2, 200, :_reduce_96, 1, 200, :_reduce_97, 1, 175, :_reduce_98, 1, 175, :_reduce_99, 4, 175, :_reduce_100, 3, 175, :_reduce_101, 3, 175, :_reduce_102, 3, 175, :_reduce_103, 3, 175, :_reduce_104, 2, 175, :_reduce_105, 1, 175, :_reduce_106, 1, 204, :_reduce_107, 1, 204, :_reduce_none, 2, 205, :_reduce_109, 1, 205, :_reduce_110, 3, 205, :_reduce_111, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_115, 1, 206, :_reduce_116, 1, 209, :_reduce_none, 1, 209, :_reduce_none, 1, 163, :_reduce_119, 1, 163, :_reduce_none, 1, 164, :_reduce_121, 0, 212, :_reduce_122, 4, 164, :_reduce_123, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 3, 181, :_reduce_195, 5, 181, :_reduce_196, 3, 181, :_reduce_197, 5, 181, :_reduce_198, 6, 181, :_reduce_199, 5, 181, :_reduce_200, 5, 181, :_reduce_201, 5, 181, :_reduce_202, 5, 181, :_reduce_203, 4, 181, :_reduce_204, 3, 181, :_reduce_205, 3, 181, :_reduce_206, 3, 181, :_reduce_207, 3, 181, :_reduce_208, 3, 181, :_reduce_209, 3, 181, :_reduce_210, 3, 181, :_reduce_211, 3, 181, :_reduce_212, 3, 181, :_reduce_213, 4, 181, :_reduce_214, 2, 181, :_reduce_215, 2, 181, :_reduce_216, 3, 181, :_reduce_217, 3, 181, :_reduce_218, 3, 181, :_reduce_219, 3, 181, :_reduce_220, 3, 181, :_reduce_221, 3, 181, :_reduce_222, 3, 181, :_reduce_223, 3, 181, :_reduce_224, 3, 181, :_reduce_225, 3, 181, :_reduce_226, 3, 181, :_reduce_227, 3, 181, :_reduce_228, 3, 181, :_reduce_229, 2, 181, :_reduce_230, 2, 181, :_reduce_231, 3, 181, :_reduce_232, 3, 181, :_reduce_233, 3, 181, :_reduce_234, 3, 181, :_reduce_235, 3, 181, :_reduce_236, 6, 181, :_reduce_237, 1, 181, :_reduce_none, 1, 215, :_reduce_239, 1, 216, :_reduce_none, 2, 216, :_reduce_241, 4, 216, :_reduce_242, 2, 216, :_reduce_243, 3, 220, :_reduce_244, 1, 221, :_reduce_none, 1, 221, :_reduce_none, 1, 171, :_reduce_247, 1, 171, :_reduce_248, 2, 171, :_reduce_249, 4, 171, :_reduce_250, 2, 171, :_reduce_251, 1, 194, :_reduce_252, 2, 194, :_reduce_253, 2, 194, :_reduce_254, 4, 194, :_reduce_255, 1, 194, :_reduce_256, 0, 224, :_reduce_257, 2, 187, :_reduce_258, 2, 223, :_reduce_259, 2, 222, :_reduce_260, 1, 222, :_reduce_none, 1, 217, :_reduce_262, 2, 217, :_reduce_263, 3, 217, :_reduce_264, 4, 217, :_reduce_265, 1, 177, :_reduce_266, 1, 177, :_reduce_267, 3, 176, :_reduce_268, 4, 176, :_reduce_269, 2, 176, :_reduce_270, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_none, 1, 214, :_reduce_281, 0, 247, :_reduce_282, 4, 214, :_reduce_283, 2, 214, :_reduce_284, 0, 248, :_reduce_285, 0, 249, :_reduce_286, 5, 214, :_reduce_287, 3, 214, :_reduce_288, 3, 214, :_reduce_289, 2, 214, :_reduce_290, 3, 214, :_reduce_291, 0, 250, :_reduce_292, 4, 214, :_reduce_293, 1, 214, :_reduce_294, 4, 214, :_reduce_295, 3, 214, :_reduce_296, 1, 214, :_reduce_297, 5, 214, :_reduce_298, 4, 214, :_reduce_299, 3, 214, :_reduce_300, 2, 214, :_reduce_301, 1, 214, :_reduce_none, 2, 214, :_reduce_303, 2, 214, :_reduce_304, 6, 214, :_reduce_305, 6, 214, :_reduce_306, 0, 251, :_reduce_307, 0, 252, :_reduce_308, 7, 214, :_reduce_309, 0, 253, :_reduce_310, 0, 254, :_reduce_311, 7, 214, :_reduce_312, 5, 214, :_reduce_313, 4, 214, :_reduce_314, 0, 255, :_reduce_315, 0, 256, :_reduce_316, 9, 214, :_reduce_317, 0, 257, :_reduce_318, 0, 258, :_reduce_319, 7, 214, :_reduce_320, 0, 259, :_reduce_321, 0, 260, :_reduce_322, 0, 261, :_reduce_323, 9, 214, :_reduce_324, 0, 262, :_reduce_325, 0, 263, :_reduce_326, 6, 214, :_reduce_327, 0, 264, :_reduce_328, 6, 214, :_reduce_329, 0, 265, :_reduce_330, 0, 266, :_reduce_331, 9, 214, :_reduce_332, 1, 214, :_reduce_333, 1, 214, :_reduce_334, 1, 214, :_reduce_335, 1, 214, :_reduce_336, 1, 170, :_reduce_337, 1, 267, :_reduce_none, 1, 268, :_reduce_none, 1, 269, :_reduce_none, 1, 270, :_reduce_none, 1, 271, :_reduce_none, 1, 272, :_reduce_none, 1, 273, :_reduce_none, 1, 274, :_reduce_none, 1, 275, :_reduce_none, 1, 276, :_reduce_none, 1, 277, :_reduce_none, 1, 238, :_reduce_none, 1, 238, :_reduce_none, 2, 238, :_reduce_none, 1, 240, :_reduce_none, 1, 240, :_reduce_none, 1, 239, :_reduce_none, 5, 239, :_reduce_355, 1, 160, :_reduce_none, 2, 160, :_reduce_357, 1, 242, :_reduce_none, 1, 242, :_reduce_359, 1, 278, :_reduce_none, 3, 278, :_reduce_361, 1, 281, :_reduce_362, 3, 281, :_reduce_363, 1, 280, :_reduce_364, 4, 280, :_reduce_365, 6, 280, :_reduce_366, 3, 280, :_reduce_367, 5, 280, :_reduce_368, 2, 280, :_reduce_369, 4, 280, :_reduce_370, 1, 280, :_reduce_371, 3, 280, :_reduce_372, 4, 282, :_reduce_373, 2, 282, :_reduce_374, 2, 282, :_reduce_375, 1, 282, :_reduce_376, 2, 287, :_reduce_377, 1, 287, :_reduce_none, 6, 288, :_reduce_379, 8, 288, :_reduce_380, 4, 288, :_reduce_381, 6, 288, :_reduce_382, 4, 288, :_reduce_383, 2, 288, :_reduce_384, 6, 288, :_reduce_385, 2, 288, :_reduce_386, 4, 288, :_reduce_387, 6, 288, :_reduce_388, 2, 288, :_reduce_389, 4, 288, :_reduce_390, 2, 288, :_reduce_391, 4, 288, :_reduce_392, 1, 288, :_reduce_393, 1, 189, :_reduce_394, 1, 189, :_reduce_none, 3, 292, :_reduce_396, 1, 292, :_reduce_397, 4, 292, :_reduce_398, 1, 293, :_reduce_none, 4, 293, :_reduce_400, 1, 294, :_reduce_401, 3, 294, :_reduce_402, 1, 295, :_reduce_403, 1, 295, :_reduce_none, 0, 299, :_reduce_405, 3, 237, :_reduce_406, 4, 297, :_reduce_407, 1, 297, :_reduce_408, 3, 298, :_reduce_409, 3, 298, :_reduce_410, 0, 302, :_reduce_411, 0, 303, :_reduce_412, 6, 301, :_reduce_413, 2, 184, :_reduce_414, 4, 184, :_reduce_415, 5, 184, :_reduce_416, 5, 184, :_reduce_417, 0, 305, :_reduce_418, 3, 236, :_reduce_419, 4, 236, :_reduce_420, 4, 236, :_reduce_421, 3, 236, :_reduce_422, 3, 236, :_reduce_423, 3, 236, :_reduce_424, 2, 236, :_reduce_425, 1, 236, :_reduce_426, 4, 236, :_reduce_427, 0, 306, :_reduce_428, 0, 307, :_reduce_429, 6, 235, :_reduce_430, 0, 308, :_reduce_431, 0, 309, :_reduce_432, 6, 235, :_reduce_433, 0, 311, :_reduce_434, 6, 241, :_reduce_435, 1, 310, :_reduce_none, 1, 310, :_reduce_none, 6, 159, :_reduce_438, 0, 159, :_reduce_439, 1, 312, :_reduce_440, 1, 312, :_reduce_none, 1, 312, :_reduce_none, 2, 313, :_reduce_443, 1, 313, :_reduce_none, 2, 161, :_reduce_445, 1, 161, :_reduce_none, 1, 225, :_reduce_447, 1, 225, :_reduce_448, 1, 225, :_reduce_none, 1, 226, :_reduce_450, 1, 315, :_reduce_451, 1, 315, :_reduce_none, 2, 315, :_reduce_453, 3, 316, :_reduce_454, 1, 316, :_reduce_455, 3, 227, :_reduce_456, 3, 228, :_reduce_457, 3, 229, :_reduce_458, 3, 229, :_reduce_459, 1, 320, :_reduce_460, 3, 320, :_reduce_461, 1, 321, :_reduce_none, 2, 321, :_reduce_463, 3, 231, :_reduce_464, 3, 231, :_reduce_465, 1, 323, :_reduce_466, 3, 323, :_reduce_467, 3, 230, :_reduce_468, 3, 230, :_reduce_469, 3, 232, :_reduce_470, 3, 232, :_reduce_471, 1, 324, :_reduce_472, 3, 324, :_reduce_473, 1, 325, :_reduce_474, 3, 325, :_reduce_475, 1, 317, :_reduce_476, 2, 317, :_reduce_477, 1, 318, :_reduce_478, 2, 318, :_reduce_479, 1, 319, :_reduce_480, 2, 319, :_reduce_481, 1, 322, :_reduce_482, 0, 327, :_reduce_483, 3, 322, :_reduce_484, 0, 328, :_reduce_485, 4, 322, :_reduce_486, 1, 326, :_reduce_487, 1, 326, :_reduce_488, 1, 326, :_reduce_489, 1, 326, :_reduce_none, 2, 210, :_reduce_491, 1, 210, :_reduce_492, 1, 329, :_reduce_none, 1, 329, :_reduce_none, 1, 329, :_reduce_none, 1, 329, :_reduce_none, 3, 211, :_reduce_497, 1, 314, :_reduce_none, 2, 314, :_reduce_499, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 202, :_reduce_none, 1, 203, :_reduce_509, 1, 203, :_reduce_510, 1, 203, :_reduce_511, 1, 203, :_reduce_512, 1, 203, :_reduce_513, 1, 203, :_reduce_514, 1, 203, :_reduce_515, 1, 233, :_reduce_516, 1, 233, :_reduce_517, 1, 169, :_reduce_518, 1, 169, :_reduce_519, 1, 174, :_reduce_520, 1, 174, :_reduce_521, 1, 243, :_reduce_522, 0, 330, :_reduce_523, 4, 243, :_reduce_524, 2, 243, :_reduce_525, 3, 245, :_reduce_526, 2, 245, :_reduce_527, 4, 331, :_reduce_528, 2, 331, :_reduce_529, 2, 331, :_reduce_530, 1, 331, :_reduce_none, 2, 333, :_reduce_532, 0, 333, :_reduce_533, 6, 300, :_reduce_534, 8, 300, :_reduce_535, 4, 300, :_reduce_536, 6, 300, :_reduce_537, 4, 300, :_reduce_538, 6, 300, :_reduce_539, 2, 300, :_reduce_540, 4, 300, :_reduce_541, 6, 300, :_reduce_542, 2, 300, :_reduce_543, 4, 300, :_reduce_544, 2, 300, :_reduce_545, 4, 300, :_reduce_546, 1, 300, :_reduce_547, 0, 300, :_reduce_548, 1, 296, :_reduce_549, 1, 296, :_reduce_550, 1, 296, :_reduce_551, 1, 296, :_reduce_552, 1, 279, :_reduce_none, 1, 279, :_reduce_554, 1, 335, :_reduce_none, 1, 336, :_reduce_none, 3, 336, :_reduce_557, 1, 289, :_reduce_558, 3, 289, :_reduce_559, 1, 337, :_reduce_none, 2, 338, :_reduce_561, 1, 338, :_reduce_562, 2, 339, :_reduce_563, 1, 339, :_reduce_564, 1, 283, :_reduce_none, 3, 283, :_reduce_566, 1, 332, :_reduce_none, 3, 332, :_reduce_568, 1, 340, :_reduce_none, 1, 340, :_reduce_none, 2, 284, :_reduce_571, 1, 284, :_reduce_572, 3, 341, :_reduce_573, 3, 342, :_reduce_574, 1, 290, :_reduce_575, 3, 290, :_reduce_576, 1, 334, :_reduce_577, 3, 334, :_reduce_578, 1, 343, :_reduce_none, 1, 343, :_reduce_none, 2, 291, :_reduce_581, 1, 291, :_reduce_582, 1, 344, :_reduce_none, 1, 344, :_reduce_none, 2, 286, :_reduce_585, 2, 285, :_reduce_586, 0, 285, :_reduce_587, 1, 246, :_reduce_none, 0, 345, :_reduce_589, 4, 246, :_reduce_590, 1, 234, :_reduce_591, 2, 234, :_reduce_592, 1, 219, :_reduce_none, 3, 219, :_reduce_594, 3, 346, :_reduce_595, 3, 346, :_reduce_596, 4, 346, :_reduce_597, 2, 346, :_reduce_598, 2, 346, :_reduce_599, 1, 193, :_reduce_none, 1, 193, :_reduce_none, 1, 193, :_reduce_none, 1, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 186, :_reduce_none, 1, 304, :_reduce_none, 1, 304, :_reduce_none, 1, 304, :_reduce_none, 1, 185, :_reduce_none, 1, 185, :_reduce_none, 1, 173, :_reduce_none, 1, 173, :_reduce_none, 0, 151, :_reduce_none, 1, 151, :_reduce_none, 0, 180, :_reduce_none, 1, 180, :_reduce_none, 2, 197, :_reduce_none, 2, 172, :_reduce_none, 0, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 218, :_reduce_none, 1, 244, :_reduce_623, 1, 244, :_reduce_none, 1, 154, :_reduce_none, 2, 154, :_reduce_626, 0, 152, :_reduce_627 ] racc_reduce_n = 628 racc_shift_n = 1059 racc_token_table = { false => 0, :error => 1, :kCLASS => 2, :kMODULE => 3, :kDEF => 4, :kUNDEF => 5, :kBEGIN => 6, :kRESCUE => 7, :kENSURE => 8, :kEND => 9, :kIF => 10, :kUNLESS => 11, :kTHEN => 12, :kELSIF => 13, :kELSE => 14, :kCASE => 15, :kWHEN => 16, :kWHILE => 17, :kUNTIL => 18, :kFOR => 19, :kBREAK => 20, :kNEXT => 21, :kREDO => 22, :kRETRY => 23, :kIN => 24, :kDO => 25, :kDO_COND => 26, :kDO_BLOCK => 27, :kDO_LAMBDA => 28, :kRETURN => 29, :kYIELD => 30, :kSUPER => 31, :kSELF => 32, :kNIL => 33, :kTRUE => 34, :kFALSE => 35, :kAND => 36, :kOR => 37, :kNOT => 38, :kIF_MOD => 39, :kUNLESS_MOD => 40, :kWHILE_MOD => 41, :kUNTIL_MOD => 42, :kRESCUE_MOD => 43, :kALIAS => 44, :kDEFINED => 45, :klBEGIN => 46, :klEND => 47, :k__LINE__ => 48, :k__FILE__ => 49, :k__ENCODING__ => 50, :tIDENTIFIER => 51, :tFID => 52, :tGVAR => 53, :tIVAR => 54, :tCONSTANT => 55, :tLABEL => 56, :tCVAR => 57, :tNTH_REF => 58, :tBACK_REF => 59, :tSTRING_CONTENT => 60, :tINTEGER => 61, :tFLOAT => 62, :tREGEXP_END => 63, :tUPLUS => 64, :tUMINUS => 65, :tUMINUS_NUM => 66, :tPOW => 67, :tCMP => 68, :tEQ => 69, :tEQQ => 70, :tNEQ => 71, :tGEQ => 72, :tLEQ => 73, :tANDOP => 74, :tOROP => 75, :tMATCH => 76, :tNMATCH => 77, :tDOT => 78, :tDOT2 => 79, :tDOT3 => 80, :tAREF => 81, :tASET => 82, :tLSHFT => 83, :tRSHFT => 84, :tCOLON2 => 85, :tCOLON3 => 86, :tOP_ASGN => 87, :tASSOC => 88, :tLPAREN => 89, :tLPAREN2 => 90, :tRPAREN => 91, :tLPAREN_ARG => 92, :tLBRACK => 93, :tLBRACK2 => 94, :tRBRACK => 95, :tLBRACE => 96, :tLBRACE_ARG => 97, :tSTAR => 98, :tSTAR2 => 99, :tAMPER => 100, :tAMPER2 => 101, :tTILDE => 102, :tPERCENT => 103, :tDIVIDE => 104, :tPLUS => 105, :tMINUS => 106, :tLT => 107, :tGT => 108, :tPIPE => 109, :tBANG => 110, :tCARET => 111, :tLCURLY => 112, :tRCURLY => 113, :tBACK_REF2 => 114, :tSYMBEG => 115, :tSTRING_BEG => 116, :tXSTRING_BEG => 117, :tREGEXP_BEG => 118, :tWORDS_BEG => 119, :tQWORDS_BEG => 120, :tSTRING_DBEG => 121, :tSTRING_DVAR => 122, :tSTRING_END => 123, :tSTRING => 124, :tSYMBOL => 125, :tNL => 126, :tEH => 127, :tCOLON => 128, :tCOMMA => 129, :tSPACE => 130, :tSEMI => 131, :tLAMBDA => 132, :tLAMBEG => 133, :tDSTAR => 134, :tCHAR => 135, :tSYMBOLS_BEG => 136, :tQSYMBOLS_BEG => 137, :tSTRING_DEND => 138, :tUBANG => 139, :tRATIONAL => 140, :tIMAGINARY => 141, :tLABEL_END => 142, :tLONELY => 143, :tEQL => 144, :tLOWEST => 145 } racc_nt_base = 146 racc_use_result_var = true Racc_arg = [ racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var ] Racc_token_to_s_table = [ "$end", "error", "kCLASS", "kMODULE", "kDEF", "kUNDEF", "kBEGIN", "kRESCUE", "kENSURE", "kEND", "kIF", "kUNLESS", "kTHEN", "kELSIF", "kELSE", "kCASE", "kWHEN", "kWHILE", "kUNTIL", "kFOR", "kBREAK", "kNEXT", "kREDO", "kRETRY", "kIN", "kDO", "kDO_COND", "kDO_BLOCK", "kDO_LAMBDA", "kRETURN", "kYIELD", "kSUPER", "kSELF", "kNIL", "kTRUE", "kFALSE", "kAND", "kOR", "kNOT", "kIF_MOD", "kUNLESS_MOD", "kWHILE_MOD", "kUNTIL_MOD", "kRESCUE_MOD", "kALIAS", "kDEFINED", "klBEGIN", "klEND", "k__LINE__", "k__FILE__", "k__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tLABEL", "tCVAR", "tNTH_REF", "tBACK_REF", "tSTRING_CONTENT", "tINTEGER", "tFLOAT", "tREGEXP_END", "tUPLUS", "tUMINUS", "tUMINUS_NUM", "tPOW", "tCMP", "tEQ", "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", "tDOT", "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN2", "tRPAREN", "tLPAREN_ARG", "tLBRACK", "tLBRACK2", "tRBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tSTAR2", "tAMPER", "tAMPER2", "tTILDE", "tPERCENT", "tDIVIDE", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tDSTAR", "tCHAR", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DEND", "tUBANG", "tRATIONAL", "tIMAGINARY", "tLABEL_END", "tLONELY", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "@1", "top_stmts", "opt_terms", "none", "top_stmt", "terms", "stmt", "bodystmt", "@2", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", "lhs", "mrhs", "mrhs_arg", "expr", "@3", "opt_nl", "arg", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "fcall", "@4", "@5", "operation", "call_args", "mlhs_basic", "mlhs_inner", "rparen", "mlhs_head", "mlhs_item", "mlhs_node", "mlhs_post", "user_variable", "keyword_variable", "cname", "cpath", "fname", "op", "reswords", "fsym", "symbol", "dsym", "@6", "simple_numeric", "primary", "arg_value", "aref_args", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@7", "literal", "strings", "xstring", "regexp", "words", "qwords", "symbols", "qsymbols", "var_ref", "assoc_list", "brace_block", "method_call", "lambda", "then", "if_tail", "do", "case_body", "for_var", "superclass", "term", "f_arglist", "singleton", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23", "@24", "@25", "@26", "@27", "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "f_marg", "f_norm_arg", "f_margs", "f_marg_list", "block_args_tail", "f_block_kwarg", "f_kwrest", "opt_f_block_arg", "f_block_arg", "opt_block_args_tail", "block_param", "f_arg", "f_block_optarg", "f_rest_arg", "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "f_bad_arg", "f_larglist", "lambda_body", "@28", "f_args", "do_block", "@29", "@30", "operation3", "@31", "@32", "@33", "@34", "@35", "cases", "@36", "exc_list", "exc_var", "numeric", "string", "string1", "string_contents", "xstring_contents", "regexp_contents", "word_list", "word", "string_content", "symbol_list", "qword_list", "qsym_list", "string_dvar", "@37", "@38", "sym", "@39", "args_tail", "f_kwarg", "opt_args_tail", "f_optarg", "f_arg_asgn", "f_arg_item", "f_label", "f_kw", "f_block_kw", "kwrest_mark", "f_opt", "f_block_opt", "restarg_mark", "blkarg_mark", "@40", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted def _reduce_1(val, _values, result) self.lexer.lex_state = :expr_beg result end def _reduce_2(val, _values, result) result = new_compstmt val result end def _reduce_3(val, _values, result) result = val[0] result end # reduce 4 omitted # reduce 5 omitted def _reduce_6(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = val[0] # TODO: remove once I have more confidence this is fixed # result.each_of_type :call_args do |s| # debug20 666, s, result # end result end def _reduce_9(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 1 yyerror "BEGIN in method" end self.env.extend result end def _reduce_10(val, _values, result) result = new_iter s(:preexe), nil, val[3] result end def _reduce_11(val, _values, result) result = new_body val result end def _reduce_12(val, _values, result) result = new_compstmt val result end # reduce 13 omitted # reduce 14 omitted def _reduce_15(val, _values, result) result = self.block_append val[0], val[2] result end def _reduce_16(val, _values, result) result = val[1] debug20 2, val, result result end def _reduce_17(val, _values, result) lexer.lex_state = :expr_fname result = self.lexer.lineno result end def _reduce_18(val, _values, result) result = s(:alias, val[1], val[3]).line(val[2]) result end def _reduce_19(val, _values, result) result = s(:valias, val[1].to_sym, val[2].to_sym) result end def _reduce_20(val, _values, result) result = s(:valias, val[1].to_sym, :"$#{val[2]}") result end def _reduce_21(val, _values, result) yyerror "can't make alias for the number variables" result end def _reduce_22(val, _values, result) result = val[1] result end def _reduce_23(val, _values, result) result = new_if val[2], val[0], nil result end def _reduce_24(val, _values, result) result = new_if val[2], nil, val[0] result end def _reduce_25(val, _values, result) result = new_while val[0], val[2], true result end def _reduce_26(val, _values, result) result = new_until val[0], val[2], true result end def _reduce_27(val, _values, result) result = s(:rescue, val[0], new_resbody(s(:array), val[2])) result end def _reduce_28(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] result end # reduce 29 omitted def _reduce_30(val, _values, result) result = new_masgn val[0], val[2], :wrap result end def _reduce_31(val, _values, result) result = new_op_asgn val result end def _reduce_32(val, _values, result) result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_33(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line result end def _reduce_34(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line result end def _reduce_35(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 4, val, result result end def _reduce_36(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 5, val, result result end def _reduce_37(val, _values, result) self.backref_assign_error val[0] result end def _reduce_38(val, _values, result) result = new_assign val[0], s(:svalue, val[2]) result end def _reduce_39(val, _values, result) result = new_masgn val[0], val[2] result end # reduce 40 omitted def _reduce_41(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_42(val, _values, result) result = new_assign val[0], val[2] result end # reduce 43 omitted def _reduce_44(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_45(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_46(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_47(val, _values, result) result = s(:call, val[1], :"!") result end # reduce 48 omitted def _reduce_49(val, _values, result) result = value_expr(val[0]) result end # reduce 50 omitted # reduce 51 omitted # reduce 52 omitted def _reduce_53(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_54(val, _values, result) self.env.extend(:dynamic) result = self.lexer.lineno result end def _reduce_55(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_56(val, _values, result) result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend result end def _reduce_57(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_58(val, _values, result) result = val[0].concat val[1].sexp_body # REFACTOR pattern result end def _reduce_59(val, _values, result) result = val[0].concat val[1].sexp_body if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end result end def _reduce_60(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_61(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] block_dup_check call, block block.insert 1, call result = block result end def _reduce_62(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_63(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block result end def _reduce_64(val, _values, result) result = new_super val[1] result end def _reduce_65(val, _values, result) result = new_yield val[1] result end def _reduce_66(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) result end def _reduce_67(val, _values, result) line = val[0].last result = s(:break, ret_args(val[1])).line(line) result end def _reduce_68(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) result end # reduce 69 omitted def _reduce_70(val, _values, result) result = val[1] result end # reduce 71 omitted def _reduce_72(val, _values, result) result = s(:masgn, s(:array, val[1])) result end def _reduce_73(val, _values, result) result = s(:masgn, val[0]) result end def _reduce_74(val, _values, result) result = s(:masgn, val[0] << val[1].compact) result end def _reduce_75(val, _values, result) result = s(:masgn, val[0] << s(:splat, val[2])) result end def _reduce_76(val, _values, result) ary1, _, splat, _, ary2 = val result = list_append ary1, s(:splat, splat) result.concat ary2.sexp_body result = s(:masgn, result) result end def _reduce_77(val, _values, result) result = s(:masgn, val[0] << s(:splat)) result end def _reduce_78(val, _values, result) ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_79(val, _values, result) result = s(:masgn, s(:array, s(:splat, val[1]))) result end def _reduce_80(val, _values, result) ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_81(val, _values, result) result = s(:masgn, s(:array, s(:splat))) result end def _reduce_82(val, _values, result) result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) result end # reduce 83 omitted def _reduce_84(val, _values, result) result = val[1] result end def _reduce_85(val, _values, result) result = s(:array, val[0]) result end def _reduce_86(val, _values, result) result = val[0] << val[1].compact result end def _reduce_87(val, _values, result) result = s(:array, val[0]) result end def _reduce_88(val, _values, result) result = list_append val[0], val[2] result end def _reduce_89(val, _values, result) result = self.assignable val[0] result end def _reduce_90(val, _values, result) result = self.assignable val[0] result end def _reduce_91(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_92(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_93(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_94(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_95(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) result end def _reduce_96(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) result end def _reduce_97(val, _values, result) self.backref_assign_error val[0] result end def _reduce_98(val, _values, result) result = self.assignable val[0] result end def _reduce_99(val, _values, result) result = self.assignable val[0] debug20 9, val, result result end def _reduce_100(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_101(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_102(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_103(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_104(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) result end def _reduce_105(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) result end def _reduce_106(val, _values, result) self.backref_assign_error val[0] result end def _reduce_107(val, _values, result) yyerror "class/module name must be CONSTANT" result end # reduce 108 omitted def _reduce_109(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_110(val, _values, result) result = val[0].to_sym result end def _reduce_111(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end # reduce 112 omitted # reduce 113 omitted # reduce 114 omitted def _reduce_115(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end def _reduce_116(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end # reduce 117 omitted # reduce 118 omitted def _reduce_119(val, _values, result) result = s(:lit, val[0].to_sym) result end # reduce 120 omitted def _reduce_121(val, _values, result) result = new_undef val[0] result end def _reduce_122(val, _values, result) lexer.lex_state = :expr_fname result end def _reduce_123(val, _values, result) result = new_undef val[0], val[3] result end # reduce 124 omitted # reduce 125 omitted # reduce 126 omitted # reduce 127 omitted # reduce 128 omitted # reduce 129 omitted # reduce 130 omitted # reduce 131 omitted # reduce 132 omitted # reduce 133 omitted # reduce 134 omitted # reduce 135 omitted # reduce 136 omitted # reduce 137 omitted # reduce 138 omitted # reduce 139 omitted # reduce 140 omitted # reduce 141 omitted # reduce 142 omitted # reduce 143 omitted # reduce 144 omitted # reduce 145 omitted # reduce 146 omitted # reduce 147 omitted # reduce 148 omitted # reduce 149 omitted # reduce 150 omitted # reduce 151 omitted # reduce 152 omitted # reduce 153 omitted # reduce 154 omitted # reduce 155 omitted # reduce 156 omitted # reduce 157 omitted # reduce 158 omitted # reduce 159 omitted # reduce 160 omitted # reduce 161 omitted # reduce 162 omitted # reduce 163 omitted # reduce 164 omitted # reduce 165 omitted # reduce 166 omitted # reduce 167 omitted # reduce 168 omitted # reduce 169 omitted # reduce 170 omitted # reduce 171 omitted # reduce 172 omitted # reduce 173 omitted # reduce 174 omitted # reduce 175 omitted # reduce 176 omitted # reduce 177 omitted # reduce 178 omitted # reduce 179 omitted # reduce 180 omitted # reduce 181 omitted # reduce 182 omitted # reduce 183 omitted # reduce 184 omitted # reduce 185 omitted # reduce 186 omitted # reduce 187 omitted # reduce 188 omitted # reduce 189 omitted # reduce 190 omitted # reduce 191 omitted # reduce 192 omitted # reduce 193 omitted # reduce 194 omitted def _reduce_195(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_196(val, _values, result) result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) result end def _reduce_197(val, _values, result) result = new_op_asgn val result end def _reduce_198(val, _values, result) result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) result end def _reduce_199(val, _values, result) val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_200(val, _values, result) result = new_op_asgn2 val result end def _reduce_201(val, _values, result) result = new_op_asgn2 val result end def _reduce_202(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) result end def _reduce_203(val, _values, result) yyerror "constant re-assignment" result end def _reduce_204(val, _values, result) yyerror "constant re-assignment" result end def _reduce_205(val, _values, result) self.backref_assign_error val[0] result end def _reduce_206(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end result end def _reduce_207(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end result end def _reduce_208(val, _values, result) result = new_call val[0], :+, argl(val[2]) result end def _reduce_209(val, _values, result) result = new_call val[0], :-, argl(val[2]) result end def _reduce_210(val, _values, result) result = new_call val[0], :*, argl(val[2]) result end def _reduce_211(val, _values, result) result = new_call val[0], :"/", argl(val[2]) result end def _reduce_212(val, _values, result) result = new_call val[0], :"%", argl(val[2]) result end def _reduce_213(val, _values, result) result = new_call val[0], :**, argl(val[2]) result end def _reduce_214(val, _values, result) result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") result end def _reduce_215(val, _values, result) result = new_call val[1], :"+@" result end def _reduce_216(val, _values, result) result = new_call val[1], :"-@" result end def _reduce_217(val, _values, result) result = new_call val[0], :"|", argl(val[2]) result end def _reduce_218(val, _values, result) result = new_call val[0], :"^", argl(val[2]) result end def _reduce_219(val, _values, result) result = new_call val[0], :"&", argl(val[2]) result end def _reduce_220(val, _values, result) result = new_call val[0], :"<=>", argl(val[2]) result end def _reduce_221(val, _values, result) result = new_call val[0], :">", argl(val[2]) result end def _reduce_222(val, _values, result) result = new_call val[0], :">=", argl(val[2]) result end def _reduce_223(val, _values, result) result = new_call val[0], :"<", argl(val[2]) result end def _reduce_224(val, _values, result) result = new_call val[0], :"<=", argl(val[2]) result end def _reduce_225(val, _values, result) result = new_call val[0], :"==", argl(val[2]) result end def _reduce_226(val, _values, result) result = new_call val[0], :"===", argl(val[2]) result end def _reduce_227(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) result end def _reduce_228(val, _values, result) result = new_match val[0], val[2] result end def _reduce_229(val, _values, result) result = s(:not, new_match(val[0], val[2])) result end def _reduce_230(val, _values, result) result = new_call val[1], :"!" result end def _reduce_231(val, _values, result) result = new_call value_expr(val[1]), :"~" result end def _reduce_232(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) result end def _reduce_233(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) result end def _reduce_234(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_235(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_236(val, _values, result) result = s(:defined, val[2]) result end def _reduce_237(val, _values, result) result = s(:if, val[0], val[2], val[5]) result end # reduce 238 omitted def _reduce_239(val, _values, result) result = value_expr(val[0]) result end # reduce 240 omitted def _reduce_241(val, _values, result) result = args [val[0]] result end def _reduce_242(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_243(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_244(val, _values, result) result = val[1] result end # reduce 245 omitted # reduce 246 omitted def _reduce_247(val, _values, result) result = val[0] result end def _reduce_248(val, _values, result) result = val[0] result end def _reduce_249(val, _values, result) result = args val result end def _reduce_250(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_251(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_252(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val result end def _reduce_253(val, _values, result) result = call_args val result = self.arg_blk_pass val[0], val[1] result end def _reduce_254(val, _values, result) result = call_args [array_to_hash(val[0])] result = self.arg_blk_pass result, val[1] result end def _reduce_255(val, _values, result) result = call_args [val[0], array_to_hash(val[2])] result = self.arg_blk_pass result, val[3] result end def _reduce_256(val, _values, result) result = call_args val result end def _reduce_257(val, _values, result) result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true result end def _reduce_258(val, _values, result) lexer.cmdarg.stack.replace val[0] result = val[1] result end def _reduce_259(val, _values, result) result = s(:block_pass, val[1]) result end def _reduce_260(val, _values, result) result = val[1] result end # reduce 261 omitted def _reduce_262(val, _values, result) result = s(:array, val[0]) result end def _reduce_263(val, _values, result) result = s(:array, s(:splat, val[1])) result end def _reduce_264(val, _values, result) result = self.list_append val[0], val[2] result end def _reduce_265(val, _values, result) result = self.list_append val[0], s(:splat, val[3]) result end def _reduce_266(val, _values, result) result = new_masgn_arg val[0] result end def _reduce_267(val, _values, result) result = new_masgn_arg val[0], :wrap result end def _reduce_268(val, _values, result) result = val[0] << val[2] result end def _reduce_269(val, _values, result) result = self.arg_concat val[0], val[3] result end def _reduce_270(val, _values, result) result = s(:splat, val[1]) result end # reduce 271 omitted # reduce 272 omitted # reduce 273 omitted # reduce 274 omitted # reduce 275 omitted # reduce 276 omitted # reduce 277 omitted # reduce 278 omitted # reduce 279 omitted # reduce 280 omitted def _reduce_281(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_282(val, _values, result) result = self.lexer.lineno result end def _reduce_283(val, _values, result) unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] result end def _reduce_284(val, _values, result) debug20 13, val, result result end def _reduce_285(val, _values, result) result = self.lexer.cmdarg.stack.dup lexer.cmdarg.stack.replace [false] # TODO add api for these result end def _reduce_286(val, _values, result) lexer.lex_state = :expr_endarg result end def _reduce_287(val, _values, result) warning "(...) interpreted as grouped expression" lexer.cmdarg.stack.replace val[1] result = val[2] result end def _reduce_288(val, _values, result) result = val[1] || s(:nil) result.paren = true result end def _reduce_289(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end def _reduce_290(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_291(val, _values, result) result = val[1] || s(:array) result.sexp_type = :array # aref_args is :args result end def _reduce_292(val, _values, result) result = self.lexer.lineno result end def _reduce_293(val, _values, result) result = new_hash val result end def _reduce_294(val, _values, result) result = s(:return) result end def _reduce_295(val, _values, result) result = new_yield val[2] result end def _reduce_296(val, _values, result) result = new_yield result end def _reduce_297(val, _values, result) result = new_yield result end def _reduce_298(val, _values, result) result = s(:defined, val[3]) result end def _reduce_299(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_300(val, _values, result) debug20 14, val, result result end def _reduce_301(val, _values, result) oper, iter = val[0], val[1] call = oper # FIX iter.insert 1, call result = iter call.line = iter.line result end # reduce 302 omitted def _reduce_303(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter result end def _reduce_304(val, _values, result) result = val[1] # TODO: fix lineno result end def _reduce_305(val, _values, result) result = new_if val[1], val[3], val[4] result end def _reduce_306(val, _values, result) result = new_if val[1], val[4], val[3] result end def _reduce_307(val, _values, result) lexer.cond.push true result end def _reduce_308(val, _values, result) lexer.cond.pop result end def _reduce_309(val, _values, result) result = new_while val[5], val[2], true result end def _reduce_310(val, _values, result) lexer.cond.push true result end def _reduce_311(val, _values, result) lexer.cond.pop result end def _reduce_312(val, _values, result) result = new_until val[5], val[2], true result end def _reduce_313(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_314(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_315(val, _values, result) lexer.cond.push true result end def _reduce_316(val, _values, result) lexer.cond.pop result end def _reduce_317(val, _values, result) result = new_for val[4], val[1], val[7] result end def _reduce_318(val, _values, result) result = self.lexer.lineno result end def _reduce_319(val, _values, result) self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend result end def _reduce_320(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_321(val, _values, result) result = self.lexer.lineno result end def _reduce_322(val, _values, result) result = self.in_def self.in_def = false result end def _reduce_323(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend result end def _reduce_324(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_325(val, _values, result) result = self.lexer.lineno result end def _reduce_326(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend result end def _reduce_327(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_328(val, _values, result) result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend # TODO: local->cmdargs = cmdarg_stack; # TODO: port local_push_gen and local_pop_gen lexer.cmdarg.stack.replace [false] result end def _reduce_329(val, _values, result) in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body result end def _reduce_330(val, _values, result) self.comments.push self.lexer.comments lexer.lex_state = :expr_fname result end def _reduce_331(val, _values, result) self.in_single += 1 self.env.extend lexer.lex_state = :expr_endfn # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] result end def _reduce_332(val, _values, result) line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body result end def _reduce_333(val, _values, result) result = s(:break) result end def _reduce_334(val, _values, result) result = s(:next) result end def _reduce_335(val, _values, result) result = s(:redo) result end def _reduce_336(val, _values, result) result = s(:retry) result end def _reduce_337(val, _values, result) result = value_expr(val[0]) result end # reduce 338 omitted # reduce 339 omitted # reduce 340 omitted # reduce 341 omitted # reduce 342 omitted # reduce 343 omitted # reduce 344 omitted # reduce 345 omitted # reduce 346 omitted # reduce 347 omitted # reduce 348 omitted # reduce 349 omitted # reduce 350 omitted # reduce 351 omitted # reduce 352 omitted # reduce 353 omitted # reduce 354 omitted def _reduce_355(val, _values, result) result = s(:if, val[1], val[3], val[4]) result end # reduce 356 omitted def _reduce_357(val, _values, result) result = val[1] result end # reduce 358 omitted def _reduce_359(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end # reduce 360 omitted def _reduce_361(val, _values, result) result = val[1] result end def _reduce_362(val, _values, result) result = s(:array, val[0]) result end def _reduce_363(val, _values, result) result = list_append val[0], val[2] result end def _reduce_364(val, _values, result) args, = val result = block_var args result end def _reduce_365(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym result end def _reduce_366(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 result end def _reduce_367(val, _values, result) args, _, _ = val result = block_var args, :* result end def _reduce_368(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 result end def _reduce_369(val, _values, result) _, splat = val result = block_var :"*#{splat}" result end def _reduce_370(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args result end def _reduce_371(val, _values, result) result = block_var :* result end def _reduce_372(val, _values, result) _, _, args = val result = block_var :*, args result end def _reduce_373(val, _values, result) result = call_args val result end def _reduce_374(val, _values, result) result = call_args val result end def _reduce_375(val, _values, result) result = call_args val result end def _reduce_376(val, _values, result) result = call_args val result end def _reduce_377(val, _values, result) result = args val result end # reduce 378 omitted def _reduce_379(val, _values, result) result = args val result end def _reduce_380(val, _values, result) result = args val result end def _reduce_381(val, _values, result) result = args val result end def _reduce_382(val, _values, result) result = args val result end def _reduce_383(val, _values, result) result = args val result end def _reduce_384(val, _values, result) result = args val result end def _reduce_385(val, _values, result) result = args val result end def _reduce_386(val, _values, result) result = args val result end def _reduce_387(val, _values, result) result = args val result end def _reduce_388(val, _values, result) result = args val result end def _reduce_389(val, _values, result) result = args val result end def _reduce_390(val, _values, result) result = args val result end def _reduce_391(val, _values, result) result = args val result end def _reduce_392(val, _values, result) result = args val result end def _reduce_393(val, _values, result) result = args val result end def _reduce_394(val, _values, result) result = 0 result end # reduce 395 omitted def _reduce_396(val, _values, result) result = args val result end def _reduce_397(val, _values, result) self.lexer.command_start = true result = s(:args) result end def _reduce_398(val, _values, result) result = args val result end # reduce 399 omitted def _reduce_400(val, _values, result) result = args val result end def _reduce_401(val, _values, result) result = args val result end def _reduce_402(val, _values, result) result = args val result end def _reduce_403(val, _values, result) result = s(:shadow, val[0].to_sym) result end # reduce 404 omitted def _reduce_405(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest result end def _reduce_406(val, _values, result) lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body self.env.unextend result end def _reduce_407(val, _values, result) result = args val result end def _reduce_408(val, _values, result) result = val[0] result = 0 if result == s(:args) result end def _reduce_409(val, _values, result) result = val[1] result end def _reduce_410(val, _values, result) result = val[1] result end def _reduce_411(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_412(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_413(val, _values, result) args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend result end def _reduce_414(val, _values, result) # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] result end def _reduce_415(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_416(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 result end def _reduce_417(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 result end def _reduce_418(val, _values, result) result = self.lexer.lineno result end def _reduce_419(val, _values, result) args = self.call_args val[2..-1] result = val[0].concat args.sexp_body result end def _reduce_420(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_421(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_422(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_423(val, _values, result) result = new_call val[0], :call, val[2], val[1] result end def _reduce_424(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_425(val, _values, result) result = new_super val[1] result end def _reduce_426(val, _values, result) result = s(:zsuper) result end def _reduce_427(val, _values, result) result = new_aref val result end def _reduce_428(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_429(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_430(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_431(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_432(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_433(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_434(val, _values, result) result = self.lexer.lineno result end def _reduce_435(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] result end # reduce 436 omitted # reduce 437 omitted def _reduce_438(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above result end def _reduce_439(val, _values, result) result = nil result end def _reduce_440(val, _values, result) result = s(:array, val[0]) result end # reduce 441 omitted # reduce 442 omitted def _reduce_443(val, _values, result) result = val[1] result end # reduce 444 omitted def _reduce_445(val, _values, result) _, body = val result = body || s(:nil) result end # reduce 446 omitted def _reduce_447(val, _values, result) result = s(:lit, val[0]) result end def _reduce_448(val, _values, result) result = s(:lit, val[0]) result end # reduce 449 omitted def _reduce_450(val, _values, result) val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] result end def _reduce_451(val, _values, result) debug20 23, val, result result end # reduce 452 omitted def _reduce_453(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_454(val, _values, result) result = val[1] result end def _reduce_455(val, _values, result) result = new_string val result end def _reduce_456(val, _values, result) result = new_xstring val[1] result end def _reduce_457(val, _values, result) result = new_regexp val result end def _reduce_458(val, _values, result) result = s(:array) result end def _reduce_459(val, _values, result) result = val[1] result end def _reduce_460(val, _values, result) result = new_word_list result end def _reduce_461(val, _values, result) result = val[0].dup << new_word_list_entry(val) result end # reduce 462 omitted def _reduce_463(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_464(val, _values, result) result = s(:array) result end def _reduce_465(val, _values, result) result = val[1] result end def _reduce_466(val, _values, result) result = new_symbol_list result end def _reduce_467(val, _values, result) result = val[0].dup << new_symbol_list_entry(val) result end def _reduce_468(val, _values, result) result = s(:array) result end def _reduce_469(val, _values, result) result = val[1] result end def _reduce_470(val, _values, result) result = s(:array) result end def _reduce_471(val, _values, result) result = val[1] result end def _reduce_472(val, _values, result) result = new_qword_list result end def _reduce_473(val, _values, result) result = val[0].dup << new_qword_list_entry(val) result end def _reduce_474(val, _values, result) result = new_qsym_list result end def _reduce_475(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) result end def _reduce_476(val, _values, result) result = s(:str, "") result end def _reduce_477(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_478(val, _values, result) result = nil result end def _reduce_479(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_480(val, _values, result) result = nil result end def _reduce_481(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_482(val, _values, result) result = new_string val result end def _reduce_483(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg # TODO: expr_value ? result end def _reduce_484(val, _values, result) lexer.lex_strterm = val[1] result = s(:evstr, val[2]) result end def _reduce_485(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store, lexer.lex_state, ] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_value result end def _reduce_486(val, _values, result) # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg lexer.lex_state = oldlex_state case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else debug20 25 raise "unknown string body: #{stmt.inspect}" end result end def _reduce_487(val, _values, result) result = s(:gvar, val[0].to_sym) result end def _reduce_488(val, _values, result) result = s(:ivar, val[0].to_sym) result end def _reduce_489(val, _values, result) result = s(:cvar, val[0].to_sym) result end # reduce 490 omitted def _reduce_491(val, _values, result) lexer.lex_state = :expr_end result = val[1].to_sym result end def _reduce_492(val, _values, result) result = val[0].to_sym result end # reduce 493 omitted # reduce 494 omitted # reduce 495 omitted # reduce 496 omitted def _reduce_497(val, _values, result) lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) when :evstr then result = s(:dsym, "", result) else debug20 26, val, result end result end # reduce 498 omitted def _reduce_499(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 500 omitted # reduce 501 omitted # reduce 502 omitted # reduce 503 omitted # reduce 504 omitted # reduce 505 omitted # reduce 506 omitted # reduce 507 omitted # reduce 508 omitted def _reduce_509(val, _values, result) result = s(:nil) result end def _reduce_510(val, _values, result) result = s(:self) result end def _reduce_511(val, _values, result) result = s(:true) result end def _reduce_512(val, _values, result) result = s(:false) result end def _reduce_513(val, _values, result) result = s(:str, self.file) result end def _reduce_514(val, _values, result) result = s(:lit, lexer.lineno) result end def _reduce_515(val, _values, result) result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end result end def _reduce_516(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_517(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_518(val, _values, result) result = self.assignable val[0] result end def _reduce_519(val, _values, result) result = self.assignable val[0] debug20 29, val, result result end def _reduce_520(val, _values, result) result = s(:nth_ref, val[0]) result end def _reduce_521(val, _values, result) result = s(:back_ref, val[0]) result end def _reduce_522(val, _values, result) result = nil result end def _reduce_523(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_524(val, _values, result) result = val[2] result end def _reduce_525(val, _values, result) yyerrok result = nil debug20 30, val, result result end def _reduce_526(val, _values, result) result = val[1] self.lexer.lex_state = :expr_beg self.lexer.command_start = true # TODO: # $$ = parser->parser_in_kwarg; # parser->parser_in_kwarg = 1; result end def _reduce_527(val, _values, result) # TODO: parser->parser_in_kwarg = $1; result = val[0] self.lexer.lex_state = :expr_beg self.lexer.command_start = true result end def _reduce_528(val, _values, result) result = args val result end def _reduce_529(val, _values, result) result = args val result end def _reduce_530(val, _values, result) result = args val result end # reduce 531 omitted def _reduce_532(val, _values, result) result = val[1] result end def _reduce_533(val, _values, result) result = nil result end def _reduce_534(val, _values, result) result = args val result end def _reduce_535(val, _values, result) result = args val result end def _reduce_536(val, _values, result) result = args val result end def _reduce_537(val, _values, result) result = args val result end def _reduce_538(val, _values, result) result = args val result end def _reduce_539(val, _values, result) result = args val result end def _reduce_540(val, _values, result) result = args val result end def _reduce_541(val, _values, result) result = args val result end def _reduce_542(val, _values, result) result = args val result end def _reduce_543(val, _values, result) result = args val result end def _reduce_544(val, _values, result) result = args val result end def _reduce_545(val, _values, result) result = args val result end def _reduce_546(val, _values, result) result = args val result end def _reduce_547(val, _values, result) result = args val result end def _reduce_548(val, _values, result) result = args val result end def _reduce_549(val, _values, result) yyerror "formal argument cannot be a constant" result end def _reduce_550(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_551(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_552(val, _values, result) yyerror "formal argument cannot be a class variable" result end # reduce 553 omitted def _reduce_554(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier result end # reduce 555 omitted # reduce 556 omitted def _reduce_557(val, _values, result) result = val[1] result end def _reduce_558(val, _values, result) case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end result end def _reduce_559(val, _values, result) list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item result end # reduce 560 omitted def _reduce_561(val, _values, result) # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) result end def _reduce_562(val, _values, result) label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) result end def _reduce_563(val, _values, result) # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) result end def _reduce_564(val, _values, result) label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) result end # reduce 565 omitted def _reduce_566(val, _values, result) list, _, item = val result = list << item.last result end # reduce 567 omitted def _reduce_568(val, _values, result) result = args val result end # reduce 569 omitted # reduce 570 omitted def _reduce_571(val, _values, result) result = :"**#{val[1]}" result end def _reduce_572(val, _values, result) result = :"**" result end def _reduce_573(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_574(val, _values, result) result = self.assignable val[0], val[2] result end def _reduce_575(val, _values, result) result = s(:block, val[0]) result end def _reduce_576(val, _values, result) result = val[0] result << val[2] result end def _reduce_577(val, _values, result) result = s(:block, val[0]) result end def _reduce_578(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 579 omitted # reduce 580 omitted def _reduce_581(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" result end def _reduce_582(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 583 omitted # reduce 584 omitted def _reduce_585(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym result end def _reduce_586(val, _values, result) result = val[1] result end def _reduce_587(val, _values, result) result = nil result end # reduce 588 omitted def _reduce_589(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_590(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit result end def _reduce_591(val, _values, result) result = s(:array) result end def _reduce_592(val, _values, result) result = val[0] result end # reduce 593 omitted def _reduce_594(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash result end def _reduce_595(val, _values, result) result = s(:array, val[0], val[2]) result end def _reduce_596(val, _values, result) result = s(:array, s(:lit, val[0][0].to_sym), val.last) result end def _reduce_597(val, _values, result) _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value) result end def _reduce_598(val, _values, result) raise "not yet: #{val.inspect}" # result = s(:array, s(:lit, val[1].to_sym), val[1]) result end def _reduce_599(val, _values, result) result = s(:array, s(:kwsplat, val[1])) result end # reduce 600 omitted # reduce 601 omitted # reduce 602 omitted # reduce 603 omitted # reduce 604 omitted # reduce 605 omitted # reduce 606 omitted # reduce 607 omitted # reduce 608 omitted # reduce 609 omitted # reduce 610 omitted # reduce 611 omitted # reduce 612 omitted # reduce 613 omitted # reduce 614 omitted # reduce 615 omitted # reduce 616 omitted # reduce 617 omitted # reduce 618 omitted # reduce 619 omitted # reduce 620 omitted # reduce 621 omitted # reduce 622 omitted def _reduce_623(val, _values, result) yyerrok result end # reduce 624 omitted # reduce 625 omitted def _reduce_626(val, _values, result) yyerrok result end def _reduce_627(val, _values, result) result = nil; result end def _reduce_none(val, _values, result) val[0] end end # class Ruby25Parser ruby_parser-3.11.0/lib/ruby23_parser.y0000644000004100000410000023352013277753330017642 0ustar www-datawww-data# -*- racc -*- class Ruby23Parser token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__ k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG tRATIONAL tIMAGINARY tLABEL_END tLONELY prechigh right tBANG tTILDE tUPLUS right tPOW right tUMINUS_NUM tUMINUS left tSTAR2 tDIVIDE tPERCENT left tPLUS tMINUS left tLSHFT tRSHFT left tAMPER2 left tPIPE tCARET left tGT tGEQ tLT tLEQ nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH left tANDOP left tOROP nonassoc tDOT2 tDOT3 right tEH tCOLON left kRESCUE_MOD right tEQL tOP_ASGN nonassoc kDEFINED right kNOT left kOR kAND nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD nonassoc tLBRACE_ARG nonassoc tLOWEST preclow rule program: { self.lexer.lex_state = :expr_beg } top_compstmt { result = new_compstmt val } top_compstmt: top_stmts opt_terms { result = val[0] } top_stmts: none | top_stmt | top_stmts terms top_stmt { result = self.block_append val[0], val[2] } | error top_stmt top_stmt: stmt { result = val[0] # TODO: remove once I have more confidence this is fixed # result.each_of_type :call_args do |s| # debug20 666, s, result # end } | klBEGIN { if (self.in_def || self.in_single > 0) then debug20 1 yyerror "BEGIN in method" end self.env.extend } tLCURLY top_compstmt tRCURLY { result = new_iter s(:preexe), nil, val[3] } bodystmt: compstmt opt_rescue opt_else opt_ensure { result = new_body val } compstmt: stmts opt_terms { result = new_compstmt val } stmts: none | stmt | stmts terms stmt { result = self.block_append val[0], val[2] } | error stmt { result = val[1] debug20 2, val, result } stmt: kALIAS fitem { lexer.lex_state = :expr_fname result = self.lexer.lineno } fitem { result = s(:alias, val[1], val[3]).line(val[2]) } | kALIAS tGVAR tGVAR { result = s(:valias, val[1].to_sym, val[2].to_sym) } | kALIAS tGVAR tBACK_REF { result = s(:valias, val[1].to_sym, :"$#{val[2]}") } | kALIAS tGVAR tNTH_REF { yyerror "can't make alias for the number variables" } | kUNDEF undef_list { result = val[1] } | stmt kIF_MOD expr_value { result = new_if val[2], val[0], nil } | stmt kUNLESS_MOD expr_value { result = new_if val[2], nil, val[0] } | stmt kWHILE_MOD expr_value { result = new_while val[0], val[2], true } | stmt kUNTIL_MOD expr_value { result = new_until val[0], val[2], true } | stmt kRESCUE_MOD stmt { result = s(:rescue, val[0], new_resbody(s(:array), val[2])) } | klEND tLCURLY compstmt tRCURLY { if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } | var_lhs tOP_ASGN command_call { result = new_op_asgn val } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value call_op tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 4, val, result } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 5, val, result } | backref tOP_ASGN command_call { self.backref_assign_error val[0] } | lhs tEQL mrhs { result = new_assign val[0], s(:svalue, val[2]) } | mlhs tEQL mrhs_arg { result = new_masgn val[0], val[2] } | expr command_asgn: lhs tEQL command_call { result = new_assign val[0], val[2] } | lhs tEQL command_asgn { result = new_assign val[0], val[2] } expr: command_call | expr kAND expr { result = logical_op :and, val[0], val[2] } | expr kOR expr { result = logical_op :or, val[0], val[2] } | kNOT opt_nl expr { result = s(:call, val[2], :"!") } | tBANG command_call { result = s(:call, val[1], :"!") } | arg expr_value: expr { result = value_expr(val[0]) } command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = new_call val[0], val[2].to_sym, val[3] } cmd_brace_block: tLBRACE_ARG { self.env.extend(:dynamic) result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend } fcall: operation { result = new_call nil, val[0].to_sym } command: fcall command_args =tLOWEST { result = val[0].concat val[1].sexp_body # REFACTOR pattern } | fcall command_args cmd_brace_block { result = val[0].concat val[1].sexp_body if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value call_op operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] block_dup_check call, block block.insert 1, call result = block } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block } | kSUPER command_args { result = new_super val[1] } | kYIELD command_args { result = new_yield val[1] } | kRETURN call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { line = val[0].last result = s(:break, ret_args(val[1])).line(line) } | kNEXT call_args { line = val[0].last result = s(:next, ret_args(val[1])).line(line) } mlhs: mlhs_basic | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { result = s(:masgn, s(:array, val[1])) } mlhs_basic: mlhs_head { result = s(:masgn, val[0]) } | mlhs_head mlhs_item { result = s(:masgn, val[0] << val[1].compact) } | mlhs_head tSTAR mlhs_node { result = s(:masgn, val[0] << s(:splat, val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val result = list_append ary1, s(:splat, splat) result.concat ary2.sexp_body result = s(:masgn, result) } | mlhs_head tSTAR { result = s(:masgn, val[0] << s(:splat)) } | mlhs_head tSTAR tCOMMA mlhs_post { ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR mlhs_node { result = s(:masgn, s(:array, s(:splat, val[1]))) } | tSTAR mlhs_node tCOMMA mlhs_post { ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR { result = s(:masgn, s(:array, s(:splat))) } | tSTAR tCOMMA mlhs_post { result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_head: mlhs_item tCOMMA { result = s(:array, val[0]) } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1].compact } mlhs_post: mlhs_item { result = s(:array, val[0]) } | mlhs_post tCOMMA mlhs_item { result = list_append val[0], val[2] } mlhs_node: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER # REFACTOR { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT # REFACTOR? { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } cname: tIDENTIFIER { yyerror "class/module name must be CONSTANT" } | tCONSTANT cpath: tCOLON3 cname { result = s(:colon3, val[1].to_sym) } | cname { result = val[0].to_sym } | primary_value tCOLON2 cname { result = s(:colon2, val[0], val[2].to_sym) } fname: tIDENTIFIER | tCONSTANT | tFID | op { lexer.lex_state = :expr_end result = val[0] } | reswords { lexer.lex_state = :expr_end result = val[0] } fsym: fname | symbol fitem: fsym { result = s(:lit, val[0].to_sym) } | dsym undef_list: fitem { result = new_undef val[0] } | undef_list tCOMMA { lexer.lex_state = :expr_fname } fitem { result = new_undef val[0], val[3] } op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE | kCLASS | kDEF | kDEFINED | kDO | kELSE | kELSIF | kEND | kENSURE | kFALSE | kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT | kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL arg: lhs tEQL arg { result = new_assign val[0], val[2] } | lhs tEQL arg kRESCUE_MOD arg { result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) } | var_lhs tOP_ASGN arg { result = new_op_asgn val } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN arg { result = new_op_asgn2 val } | primary_value call_op tCONSTANT tOP_ASGN arg { result = new_op_asgn2 val } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | tCOLON3 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | backref tOP_ASGN arg { self.backref_assign_error val[0] } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end } | arg tPLUS arg { result = new_call val[0], :+, argl(val[2]) } | arg tMINUS arg { result = new_call val[0], :-, argl(val[2]) } | arg tSTAR2 arg # TODO: rename { result = new_call val[0], :*, argl(val[2]) } | arg tDIVIDE arg { result = new_call val[0], :"/", argl(val[2]) } | arg tPERCENT arg { result = new_call val[0], :"%", argl(val[2]) } | arg tPOW arg { result = new_call val[0], :**, argl(val[2]) } | tUMINUS_NUM simple_numeric tPOW arg { result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") } | tUPLUS arg { result = new_call val[1], :"+@" } | tUMINUS arg { result = new_call val[1], :"-@" } | arg tPIPE arg { result = new_call val[0], :"|", argl(val[2]) } | arg tCARET arg { result = new_call val[0], :"^", argl(val[2]) } | arg tAMPER2 arg { result = new_call val[0], :"&", argl(val[2]) } | arg tCMP arg { result = new_call val[0], :"<=>", argl(val[2]) } | arg tGT arg { result = new_call val[0], :">", argl(val[2]) } | arg tGEQ arg { result = new_call val[0], :">=", argl(val[2]) } | arg tLT arg { result = new_call val[0], :"<", argl(val[2]) } | arg tLEQ arg { result = new_call val[0], :"<=", argl(val[2]) } | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) } | arg tEQQ arg { result = new_call val[0], :"===", argl(val[2]) } | arg tNEQ arg { result = new_call val[0], :"!=", argl(val[2]) } | arg tMATCH arg { result = new_match val[0], val[2] } | arg tNMATCH arg { result = s(:not, new_match(val[0], val[2])) } | tBANG arg { result = new_call val[1], :"!" } | tTILDE arg { result = new_call value_expr(val[1]), :"~" } | arg tLSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) } | arg tRSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) } | arg tANDOP arg { result = logical_op :and, val[0], val[2] } | arg tOROP arg { result = logical_op :or, val[0], val[2] } | kDEFINED opt_nl arg { result = s(:defined, val[2]) } | arg tEH arg opt_nl tCOLON arg { result = s(:if, val[0], val[2], val[5]) } | primary arg_value: arg { result = value_expr(val[0]) } aref_args: none | args trailer { result = args [val[0]] } | args tCOMMA assocs trailer { result = args [val[0], array_to_hash(val[2])] } | assocs trailer { result = args [array_to_hash(val[0])] } paren_args: tLPAREN2 opt_call_args rparen { result = val[1] } opt_paren_args: none | paren_args opt_call_args: none { result = val[0] } | call_args { result = val[0] } | args tCOMMA { result = args val } | args tCOMMA assocs tCOMMA { result = args [val[0], array_to_hash(val[2])] } | assocs tCOMMA { result = args [array_to_hash(val[0])] } call_args: command { warning "parenthesize argument(s) for future version" result = call_args val } | args opt_block_arg { result = call_args val result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { result = call_args [array_to_hash(val[0])] result = self.arg_blk_pass result, val[1] } | args tCOMMA assocs opt_block_arg { result = call_args [val[0], array_to_hash(val[2])] result = self.arg_blk_pass result, val[3] } | block_arg { result = call_args val } command_args: { result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true } call_args { lexer.cmdarg.stack.replace val[0] result = val[1] } block_arg: tAMPER arg_value { result = s(:block_pass, val[1]) } opt_block_arg: tCOMMA block_arg { result = val[1] } | none args: arg_value { result = s(:array, val[0]) } | tSTAR arg_value { result = s(:array, s(:splat, val[1])) } | args tCOMMA arg_value { result = self.list_append val[0], val[2] } | args tCOMMA tSTAR arg_value { result = self.list_append val[0], s(:splat, val[3]) } mrhs_arg: mrhs { result = new_masgn_arg val[0] } | arg_value { result = new_masgn_arg val[0], :wrap } mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = self.arg_concat val[0], val[3] } | tSTAR arg_value { result = s(:splat, val[1]) } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = new_call nil, val[0].to_sym } | kBEGIN { result = self.lexer.lineno } bodystmt kEND { unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] } | tLPAREN_ARG rparen { debug20 13, val, result } | tLPAREN_ARG { result = self.lexer.cmdarg.stack.dup lexer.cmdarg.stack.replace [false] # TODO add api for these } expr { lexer.lex_state = :expr_endarg } rparen { warning "(...) interpreted as grouped expression" lexer.cmdarg.stack.replace val[1] result = val[2] } | tLPAREN compstmt tRPAREN { result = val[1] || s(:nil) result.paren = true } | primary_value tCOLON2 tCONSTANT { result = s(:colon2, val[0], val[2].to_sym) } | tCOLON3 tCONSTANT { result = s(:colon3, val[1].to_sym) } | tLBRACK aref_args tRBRACK { result = val[1] || s(:array) result.sexp_type = :array # aref_args is :args } | tLBRACE { result = self.lexer.lineno } assoc_list tRCURLY { result = new_hash val } | kRETURN { result = s(:return) } | kYIELD tLPAREN2 call_args rparen { result = new_yield val[2] } | kYIELD tLPAREN2 rparen { result = new_yield } | kYIELD { result = new_yield } | kDEFINED opt_nl tLPAREN2 expr rparen { result = s(:defined, val[3]) } | kNOT tLPAREN2 expr rparen { result = s(:call, val[2], :"!") } | kNOT tLPAREN2 rparen { debug20 14, val, result } | fcall brace_block { oper, iter = val[0], val[1] call = oper # FIX iter.insert 1, call result = iter call.line = iter.line } | method_call | method_call brace_block { call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter } | tLAMBDA lambda { result = val[1] # TODO: fix lineno } | kIF expr_value then compstmt if_tail kEND { result = new_if val[1], val[3], val[4] } | kUNLESS expr_value then compstmt opt_else kEND { result = new_if val[1], val[4], val[3] } | kWHILE { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_while val[5], val[2], true } | kUNTIL { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_until val[5], val[2], true } | kCASE expr_value opt_terms case_body kEND { (_, line), expr, _, body, _ = val result = new_case expr, body, line } | kCASE opt_terms case_body kEND { (_, line), _, body, _ = val result = new_case nil, body, line } | kFOR for_var kIN { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_for val[4], val[1], val[7] } | kCLASS { result = self.lexer.lineno } cpath superclass { self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend } bodystmt kEND { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kCLASS tLSHFT { result = self.lexer.lineno } expr { result = self.in_def self.in_def = false } term { result = self.in_single self.in_single = 0 self.env.extend } bodystmt kEND { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kMODULE { result = self.lexer.lineno } cpath { self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend } bodystmt kEND { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kDEF fname { result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend # TODO: local->cmdargs = cmdarg_stack; # TODO: port local_push_gen and local_pop_gen lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body } | kDEF singleton dot_or_colon { self.comments.push self.lexer.comments lexer.lex_state = :expr_fname } fname { self.in_single += 1 self.env.extend lexer.lex_state = :expr_endfn # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body } | kBREAK { result = s(:break) } | kNEXT { result = s(:next) } | kREDO { result = s(:redo) } | kRETRY { result = s(:retry) } primary_value: primary { result = value_expr(val[0]) } # These are really stupid k_begin: kBEGIN k_if: kIF k_unless: kUNLESS k_while: kWHILE k_until: kUNTIL k_case: kCASE k_for: kFOR k_class: kCLASS k_module: kMODULE k_def: kDEF k_end: kEND then: term | kTHEN | term kTHEN do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { result = s(:if, val[1], val[3], val[4]) } opt_else: none | kELSE compstmt { result = val[1] } for_var: lhs | mlhs { val[0].delete_at 1 if val[0][1].nil? # HACK } f_marg: f_norm_arg | tLPAREN f_margs rparen { result = val[1] } f_marg_list: f_marg { result = s(:array, val[0]) } | f_marg_list tCOMMA f_marg { result = list_append val[0], val[2] } f_margs: f_marg_list { args, = val result = block_var args } | f_marg_list tCOMMA tSTAR f_norm_arg { args, _, _, splat = val result = block_var args, "*#{splat}".to_sym } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 } | f_marg_list tCOMMA tSTAR { args, _, _ = val result = block_var args, :* } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { args, _, _, _, args2 = val result = block_var args, :*, args2 } | tSTAR f_norm_arg { _, splat = val result = block_var :"*#{splat}" } | tSTAR f_norm_arg tCOMMA f_marg_list { _, splat, _, args = val result = block_var :"*#{splat}", args } | tSTAR { result = block_var :* } | tSTAR tCOMMA f_marg_list { _, _, args = val result = block_var :*, args } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = call_args val } | f_block_kwarg opt_f_block_arg { result = call_args val } | f_kwrest opt_f_block_arg { result = call_args val } | f_block_arg { result = call_args val } opt_block_args_tail: tCOMMA block_args_tail { result = args val } | none block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_block_optarg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_rest_arg opt_block_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | block_args_tail { result = args val } opt_block_param: none { result = 0 } | block_param_def block_param_def: tPIPE opt_bv_decl tPIPE { result = args val } | tOROP { self.lexer.command_start = true result = s(:args) } | tPIPE block_param opt_bv_decl tPIPE { result = args val } opt_bv_decl: opt_nl | opt_nl tSEMI bv_decls opt_nl { result = args val } bv_decls: bvar { result = args val } | bv_decls tCOMMA bvar { result = args val } bvar: tIDENTIFIER { result = s(:shadow, val[0].to_sym) } | f_bad_arg lambda: { self.env.extend :dynamic result = self.lexer.lineno result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } f_larglist lambda_body { lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body self.env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl rparen { result = args val } | f_args { result = val[0] result = 0 if result == s(:args) } lambda_body: tLAMBEG compstmt tRCURLY { result = val[1] } | kDO_LAMBDA compstmt kEND { result = val[1] } do_block: kDO_BLOCK { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend } block_call: command do_block { # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] } | block_call dot_or_colon operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } | block_call dot_or_colon operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } | block_call dot_or_colon operation2 command_args do_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } method_call: fcall { result = self.lexer.lineno } paren_args { args = self.call_args val[2..-1] result = val[0].concat args.sexp_body } | primary_value call_op operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value tCOLON2 operation2 paren_args { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation3 { result = new_call val[0], val[2].to_sym } | primary_value call_op paren_args { result = new_call val[0], :call, val[2], val[1] } | primary_value tCOLON2 paren_args { result = new_call val[0], :call, val[2] } | kSUPER paren_args { result = new_super val[1] } | kSUPER { result = s(:zsuper) } | primary_value tLBRACK2 opt_call_args rbracket { result = new_aref val } brace_block: tLCURLY { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } | kDO { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } case_body: kWHEN { result = self.lexer.lineno } args then compstmt cases { result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] } cases: opt_else | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above } | { result = nil } exc_list: arg_value { result = s(:array, val[0]) } | mrhs | none exc_var: tASSOC lhs { result = val[1] } | none opt_ensure: kENSURE compstmt { _, body = val result = body || s(:nil) } | none literal: numeric { result = s(:lit, val[0]) } | symbol { result = s(:lit, val[0]) } | dsym strings: string { val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] } string: tCHAR { debug20 23, val, result } | string1 | string string1 { result = self.literal_concat val[0], val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = val[1] } | tSTRING { result = new_string val } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = new_xstring val[1] } regexp: tREGEXP_BEG regexp_contents tREGEXP_END { result = new_regexp val } words: tWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tWORDS_BEG word_list tSTRING_END { result = val[1] } word_list: none { result = new_word_list } | word_list word tSPACE { result = val[0].dup << new_word_list_entry(val) } word: string_content | word string_content { result = self.literal_concat val[0], val[1] } symbols: tSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tSYMBOLS_BEG symbol_list tSTRING_END { result = val[1] } symbol_list: none { result = new_symbol_list } | symbol_list word tSPACE { result = val[0].dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tQWORDS_BEG qword_list tSTRING_END { result = val[1] } qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tQSYMBOLS_BEG qsym_list tSTRING_END { result = val[1] } qword_list: none { result = new_qword_list } | qword_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qword_list_entry(val) } qsym_list: none { result = new_qsym_list } | qsym_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qsym_list_entry(val) } string_contents: none { result = s(:str, "") } | string_contents string_content { result = literal_concat(val[0], val[1]) } xstring_contents: none { result = nil } | xstring_contents string_content { result = literal_concat(val[0], val[1]) } regexp_contents: none { result = nil } | regexp_contents string_content { result = literal_concat(val[0], val[1]) } string_content: tSTRING_CONTENT { result = new_string val } | tSTRING_DVAR { result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg # TODO: expr_value ? } string_dvar { lexer.lex_strterm = val[1] result = s(:evstr, val[2]) } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store, lexer.lex_state, ] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_value } compstmt tRCURLY { # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg lexer.lex_state = oldlex_state case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else debug20 25 raise "unknown string body: #{stmt.inspect}" end } string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } | tIVAR { result = s(:ivar, val[0].to_sym) } | tCVAR { result = s(:cvar, val[0].to_sym) } | backref symbol: tSYMBEG sym { lexer.lex_state = :expr_end result = val[1].to_sym } | tSYMBOL { result = val[0].to_sym } sym: fname | tIVAR | tGVAR | tCVAR dsym: tSYMBEG xstring_contents tSTRING_END { lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) when :evstr then result = s(:dsym, "", result) else debug20 26, val, result end } numeric: simple_numeric | tUMINUS_NUM simple_numeric { result = -val[1] # TODO: pt_testcase } simple_numeric: tINTEGER | tFLOAT | tRATIONAL | tIMAGINARY user_variable: tIDENTIFIER | tIVAR | tGVAR | tCONSTANT | tCVAR keyword_variable: kNIL { result = s(:nil) } | kSELF { result = s(:self) } | kTRUE { result = s(:true) } | kFALSE { result = s(:false) } | k__FILE__ { result = s(:str, self.file) } | k__LINE__ { result = s(:lit, lexer.lineno) } | k__ENCODING__ { result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end } var_ref: user_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } | keyword_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } var_lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 29, val, result } backref: tNTH_REF { result = s(:nth_ref, val[0]) } | tBACK_REF { result = s(:back_ref, val[0]) } superclass: term { result = nil } | tLT { lexer.lex_state = :expr_beg } expr_value term { result = val[2] } | error term { yyerrok result = nil debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] self.lexer.lex_state = :expr_beg self.lexer.command_start = true # TODO: # $$ = parser->parser_in_kwarg; # parser->parser_in_kwarg = 1; } | f_args term { # TODO: parser->parser_in_kwarg = $1; result = val[0] self.lexer.lex_state = :expr_beg self.lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = args val } | f_kwarg opt_f_block_arg { result = args val } | f_kwrest opt_f_block_arg { result = args val } | f_block_arg opt_args_tail: tCOMMA args_tail { result = val[1] } | { result = nil } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_optarg opt_args_tail { result = args val } | f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_rest_arg opt_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | args_tail { result = args val } | { result = args val } f_bad_arg: tCONSTANT { yyerror "formal argument cannot be a constant" } | tIVAR { yyerror "formal argument cannot be an instance variable" } | tGVAR { yyerror "formal argument cannot be a global variable" } | tCVAR { yyerror "formal argument cannot be a class variable" } f_norm_arg: f_bad_arg | tIDENTIFIER { identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier } f_arg_asgn: f_norm_arg f_arg_item: f_arg_asgn | tLPAREN f_margs rparen { result = val[1] } f_arg: f_arg_item { case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end } | f_arg tCOMMA f_arg_item { list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item } f_label: tLABEL f_kw: f_label arg_value { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } | f_label { label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) } f_block_kw: f_label primary_value { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } | f_label { label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) } f_block_kwarg: f_block_kw | f_block_kwarg tCOMMA f_block_kw { list, _, item = val result = list << item.last } f_kwarg: f_kw | f_kwarg tCOMMA f_kw { result = args val } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { result = :"**#{val[1]}" } | kwrest_mark { result = :"**" } f_opt: f_arg_asgn tEQL arg_value { result = self.assignable val[0], val[2] # TODO: detect duplicate names } f_block_opt: f_arg_asgn tEQL primary_value { result = self.assignable val[0], val[2] } f_block_optarg: f_block_opt { result = s(:block, val[0]) } | f_block_optarg tCOMMA f_block_opt { result = val[0] result << val[2] } f_optarg: f_opt { result = s(:block, val[0]) } | f_optarg tCOMMA f_opt { result = self.block_append val[0], val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" } | restarg_mark { name = :"*" self.env[name] = :lvar result = name } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym } opt_f_block_arg: tCOMMA f_block_arg { result = val[1] } | { result = nil } singleton: var_ref | tLPAREN2 { lexer.lex_state = :expr_beg } expr rparen { result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit } assoc_list: none # [!nil] { result = s(:array) } | assocs trailer # [!nil] { result = val[0] } assocs: assoc | assocs tCOMMA assoc { list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash } assoc: arg_value tASSOC arg_value { result = s(:array, val[0], val[2]) } | tLABEL opt_nl arg_value { result = s(:array, s(:lit, val[0][0].to_sym), val.last) } | tSTRING_BEG string_contents tLABEL_END arg_value { _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value) } | tSYMBOL arg_value { raise "not yet: #{val.inspect}" # result = s(:array, s(:lit, val[1].to_sym), val[1]) } | tDSTAR arg_value { result = s(:array, s(:kwsplat, val[1])) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 call_op: tDOT | tLONELY opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN rbracket: opt_nl tRBRACK trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI { yyerrok } none: { result = nil; } end ---- inner require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ruby_parser-3.11.0/lib/ruby22_parser.y0000644000004100000410000023344713277753330017651 0ustar www-datawww-data# -*- racc -*- class Ruby22Parser token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__ k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG tRATIONAL tIMAGINARY tLABEL_END prechigh right tBANG tTILDE tUPLUS right tPOW right tUMINUS_NUM tUMINUS left tSTAR2 tDIVIDE tPERCENT left tPLUS tMINUS left tLSHFT tRSHFT left tAMPER2 left tPIPE tCARET left tGT tGEQ tLT tLEQ nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH left tANDOP left tOROP nonassoc tDOT2 tDOT3 right tEH tCOLON left kRESCUE_MOD right tEQL tOP_ASGN nonassoc kDEFINED right kNOT left kOR kAND nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD nonassoc tLBRACE_ARG nonassoc tLOWEST preclow rule program: { self.lexer.lex_state = :expr_beg } top_compstmt { result = new_compstmt val } top_compstmt: top_stmts opt_terms { result = val[0] } top_stmts: none | top_stmt | top_stmts terms top_stmt { result = self.block_append val[0], val[2] } | error top_stmt top_stmt: stmt { result = val[0] # TODO: remove once I have more confidence this is fixed # result.each_of_type :call_args do |s| # debug20 666, s, result # end } | klBEGIN { if (self.in_def || self.in_single > 0) then debug20 1 yyerror "BEGIN in method" end self.env.extend } tLCURLY top_compstmt tRCURLY { result = new_iter s(:preexe), nil, val[3] } bodystmt: compstmt opt_rescue opt_else opt_ensure { result = new_body val } compstmt: stmts opt_terms { result = new_compstmt val } stmts: none | stmt | stmts terms stmt { result = self.block_append val[0], val[2] } | error stmt { result = val[1] debug20 2, val, result } stmt: kALIAS fitem { lexer.lex_state = :expr_fname result = self.lexer.lineno } fitem { result = s(:alias, val[1], val[3]).line(val[2]) } | kALIAS tGVAR tGVAR { result = s(:valias, val[1].to_sym, val[2].to_sym) } | kALIAS tGVAR tBACK_REF { result = s(:valias, val[1].to_sym, :"$#{val[2]}") } | kALIAS tGVAR tNTH_REF { yyerror "can't make alias for the number variables" } | kUNDEF undef_list { result = val[1] } | stmt kIF_MOD expr_value { result = new_if val[2], val[0], nil } | stmt kUNLESS_MOD expr_value { result = new_if val[2], nil, val[0] } | stmt kWHILE_MOD expr_value { result = new_while val[0], val[2], true } | stmt kUNTIL_MOD expr_value { result = new_until val[0], val[2], true } | stmt kRESCUE_MOD stmt { result = s(:rescue, val[0], new_resbody(s(:array), val[2])) } | klEND tLCURLY compstmt tRCURLY { if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } | var_lhs tOP_ASGN command_call { result = new_op_asgn val } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value call_op tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 4, val, result } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 5, val, result } | backref tOP_ASGN command_call { self.backref_assign_error val[0] } | lhs tEQL mrhs { result = new_assign val[0], s(:svalue, val[2]) } | mlhs tEQL mrhs_arg { result = new_masgn val[0], val[2] } | expr command_asgn: lhs tEQL command_call { result = new_assign val[0], val[2] } | lhs tEQL command_asgn { result = new_assign val[0], val[2] } expr: command_call | expr kAND expr { result = logical_op :and, val[0], val[2] } | expr kOR expr { result = logical_op :or, val[0], val[2] } | kNOT opt_nl expr { result = s(:call, val[2], :"!") } | tBANG command_call { result = s(:call, val[1], :"!") } | arg expr_value: expr { result = value_expr(val[0]) } command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = new_call val[0], val[2].to_sym, val[3] } cmd_brace_block: tLBRACE_ARG { self.env.extend(:dynamic) result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend } fcall: operation { result = new_call nil, val[0].to_sym } command: fcall command_args =tLOWEST { result = val[0].concat val[1].sexp_body # REFACTOR pattern } | fcall command_args cmd_brace_block { result = val[0].concat val[1].sexp_body if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value call_op operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] block_dup_check call, block block.insert 1, call result = block } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block } | kSUPER command_args { result = new_super val[1] } | kYIELD command_args { result = new_yield val[1] } | kRETURN call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { line = val[0].last result = s(:break, ret_args(val[1])).line(line) } | kNEXT call_args { line = val[0].last result = s(:next, ret_args(val[1])).line(line) } mlhs: mlhs_basic | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { result = s(:masgn, s(:array, val[1])) } mlhs_basic: mlhs_head { result = s(:masgn, val[0]) } | mlhs_head mlhs_item { result = s(:masgn, val[0] << val[1].compact) } | mlhs_head tSTAR mlhs_node { result = s(:masgn, val[0] << s(:splat, val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val result = list_append ary1, s(:splat, splat) result.concat ary2.sexp_body result = s(:masgn, result) } | mlhs_head tSTAR { result = s(:masgn, val[0] << s(:splat)) } | mlhs_head tSTAR tCOMMA mlhs_post { ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR mlhs_node { result = s(:masgn, s(:array, s(:splat, val[1]))) } | tSTAR mlhs_node tCOMMA mlhs_post { ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR { result = s(:masgn, s(:array, s(:splat))) } | tSTAR tCOMMA mlhs_post { result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_head: mlhs_item tCOMMA { result = s(:array, val[0]) } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1].compact } mlhs_post: mlhs_item { result = s(:array, val[0]) } | mlhs_post tCOMMA mlhs_item { result = list_append val[0], val[2] } mlhs_node: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER # REFACTOR { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT # REFACTOR? { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } cname: tIDENTIFIER { yyerror "class/module name must be CONSTANT" } | tCONSTANT cpath: tCOLON3 cname { result = s(:colon3, val[1].to_sym) } | cname { result = val[0].to_sym } | primary_value tCOLON2 cname { result = s(:colon2, val[0], val[2].to_sym) } fname: tIDENTIFIER | tCONSTANT | tFID | op { lexer.lex_state = :expr_end result = val[0] } | reswords { lexer.lex_state = :expr_end result = val[0] } fsym: fname | symbol fitem: fsym { result = s(:lit, val[0].to_sym) } | dsym undef_list: fitem { result = new_undef val[0] } | undef_list tCOMMA { lexer.lex_state = :expr_fname } fitem { result = new_undef val[0], val[3] } op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE | kCLASS | kDEF | kDEFINED | kDO | kELSE | kELSIF | kEND | kENSURE | kFALSE | kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT | kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL arg: lhs tEQL arg { result = new_assign val[0], val[2] } | lhs tEQL arg kRESCUE_MOD arg { result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) } | var_lhs tOP_ASGN arg { result = new_op_asgn val } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN arg { result = new_op_asgn2 val } | primary_value call_op tCONSTANT tOP_ASGN arg { result = new_op_asgn2 val } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | tCOLON3 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | backref tOP_ASGN arg { self.backref_assign_error val[0] } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end } | arg tPLUS arg { result = new_call val[0], :+, argl(val[2]) } | arg tMINUS arg { result = new_call val[0], :-, argl(val[2]) } | arg tSTAR2 arg # TODO: rename { result = new_call val[0], :*, argl(val[2]) } | arg tDIVIDE arg { result = new_call val[0], :"/", argl(val[2]) } | arg tPERCENT arg { result = new_call val[0], :"%", argl(val[2]) } | arg tPOW arg { result = new_call val[0], :**, argl(val[2]) } | tUMINUS_NUM simple_numeric tPOW arg { result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") } | tUPLUS arg { result = new_call val[1], :"+@" } | tUMINUS arg { result = new_call val[1], :"-@" } | arg tPIPE arg { result = new_call val[0], :"|", argl(val[2]) } | arg tCARET arg { result = new_call val[0], :"^", argl(val[2]) } | arg tAMPER2 arg { result = new_call val[0], :"&", argl(val[2]) } | arg tCMP arg { result = new_call val[0], :"<=>", argl(val[2]) } | arg tGT arg { result = new_call val[0], :">", argl(val[2]) } | arg tGEQ arg { result = new_call val[0], :">=", argl(val[2]) } | arg tLT arg { result = new_call val[0], :"<", argl(val[2]) } | arg tLEQ arg { result = new_call val[0], :"<=", argl(val[2]) } | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) } | arg tEQQ arg { result = new_call val[0], :"===", argl(val[2]) } | arg tNEQ arg { result = new_call val[0], :"!=", argl(val[2]) } | arg tMATCH arg { result = new_match val[0], val[2] } | arg tNMATCH arg { result = s(:not, new_match(val[0], val[2])) } | tBANG arg { result = new_call val[1], :"!" } | tTILDE arg { result = new_call value_expr(val[1]), :"~" } | arg tLSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) } | arg tRSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) } | arg tANDOP arg { result = logical_op :and, val[0], val[2] } | arg tOROP arg { result = logical_op :or, val[0], val[2] } | kDEFINED opt_nl arg { result = s(:defined, val[2]) } | arg tEH arg opt_nl tCOLON arg { result = s(:if, val[0], val[2], val[5]) } | primary arg_value: arg { result = value_expr(val[0]) } aref_args: none | args trailer { result = args [val[0]] } | args tCOMMA assocs trailer { result = args [val[0], array_to_hash(val[2])] } | assocs trailer { result = args [array_to_hash(val[0])] } paren_args: tLPAREN2 opt_call_args rparen { result = val[1] } opt_paren_args: none | paren_args opt_call_args: none { result = val[0] } | call_args { result = val[0] } | args tCOMMA { result = args val } | args tCOMMA assocs tCOMMA { result = args [val[0], array_to_hash(val[2])] } | assocs tCOMMA { result = args [array_to_hash(val[0])] } call_args: command { warning "parenthesize argument(s) for future version" result = call_args val } | args opt_block_arg { result = call_args val result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { result = call_args [array_to_hash(val[0])] result = self.arg_blk_pass result, val[1] } | args tCOMMA assocs opt_block_arg { result = call_args [val[0], array_to_hash(val[2])] result = self.arg_blk_pass result, val[3] } | block_arg { result = call_args val } command_args: { result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true } call_args { lexer.cmdarg.stack.replace val[0] result = val[1] } block_arg: tAMPER arg_value { result = s(:block_pass, val[1]) } opt_block_arg: tCOMMA block_arg { result = val[1] } | none args: arg_value { result = s(:array, val[0]) } | tSTAR arg_value { result = s(:array, s(:splat, val[1])) } | args tCOMMA arg_value { result = self.list_append val[0], val[2] } | args tCOMMA tSTAR arg_value { result = self.list_append val[0], s(:splat, val[3]) } mrhs_arg: mrhs { result = new_masgn_arg val[0] } | arg_value { result = new_masgn_arg val[0], :wrap } mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = self.arg_concat val[0], val[3] } | tSTAR arg_value { result = s(:splat, val[1]) } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = new_call nil, val[0].to_sym } | kBEGIN { result = self.lexer.lineno } bodystmt kEND { unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] } | tLPAREN_ARG rparen { debug20 13, val, result } | tLPAREN_ARG { result = self.lexer.cmdarg.stack.dup lexer.cmdarg.stack.replace [false] # TODO add api for these } expr { lexer.lex_state = :expr_endarg } rparen { warning "(...) interpreted as grouped expression" lexer.cmdarg.stack.replace val[1] result = val[2] } | tLPAREN compstmt tRPAREN { result = val[1] || s(:nil) result.paren = true } | primary_value tCOLON2 tCONSTANT { result = s(:colon2, val[0], val[2].to_sym) } | tCOLON3 tCONSTANT { result = s(:colon3, val[1].to_sym) } | tLBRACK aref_args tRBRACK { result = val[1] || s(:array) result.sexp_type = :array # aref_args is :args } | tLBRACE { result = self.lexer.lineno } assoc_list tRCURLY { result = new_hash val } | kRETURN { result = s(:return) } | kYIELD tLPAREN2 call_args rparen { result = new_yield val[2] } | kYIELD tLPAREN2 rparen { result = new_yield } | kYIELD { result = new_yield } | kDEFINED opt_nl tLPAREN2 expr rparen { result = s(:defined, val[3]) } | kNOT tLPAREN2 expr rparen { result = s(:call, val[2], :"!") } | kNOT tLPAREN2 rparen { debug20 14, val, result } | fcall brace_block { oper, iter = val[0], val[1] call = oper # FIX iter.insert 1, call result = iter call.line = iter.line } | method_call | method_call brace_block { call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter } | tLAMBDA lambda { result = val[1] # TODO: fix lineno } | kIF expr_value then compstmt if_tail kEND { result = new_if val[1], val[3], val[4] } | kUNLESS expr_value then compstmt opt_else kEND { result = new_if val[1], val[4], val[3] } | kWHILE { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_while val[5], val[2], true } | kUNTIL { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_until val[5], val[2], true } | kCASE expr_value opt_terms case_body kEND { (_, line), expr, _, body, _ = val result = new_case expr, body, line } | kCASE opt_terms case_body kEND { (_, line), _, body, _ = val result = new_case nil, body, line } | kFOR for_var kIN { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_for val[4], val[1], val[7] } | kCLASS { result = self.lexer.lineno } cpath superclass { self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend } bodystmt kEND { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kCLASS tLSHFT { result = self.lexer.lineno } expr { result = self.in_def self.in_def = false } term { result = self.in_single self.in_single = 0 self.env.extend } bodystmt kEND { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kMODULE { result = self.lexer.lineno } cpath { self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend } bodystmt kEND { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kDEF fname { result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend # TODO: local->cmdargs = cmdarg_stack; # TODO: port local_push_gen and local_pop_gen lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body } | kDEF singleton dot_or_colon { self.comments.push self.lexer.comments lexer.lex_state = :expr_fname } fname { self.in_single += 1 self.env.extend lexer.lex_state = :expr_endfn # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body } | kBREAK { result = s(:break) } | kNEXT { result = s(:next) } | kREDO { result = s(:redo) } | kRETRY { result = s(:retry) } primary_value: primary { result = value_expr(val[0]) } # These are really stupid k_begin: kBEGIN k_if: kIF k_unless: kUNLESS k_while: kWHILE k_until: kUNTIL k_case: kCASE k_for: kFOR k_class: kCLASS k_module: kMODULE k_def: kDEF k_end: kEND then: term | kTHEN | term kTHEN do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { result = s(:if, val[1], val[3], val[4]) } opt_else: none | kELSE compstmt { result = val[1] } for_var: lhs | mlhs { val[0].delete_at 1 if val[0][1].nil? # HACK } f_marg: f_norm_arg | tLPAREN f_margs rparen { result = val[1] } f_marg_list: f_marg { result = s(:array, val[0]) } | f_marg_list tCOMMA f_marg { result = list_append val[0], val[2] } f_margs: f_marg_list { args, = val result = block_var args } | f_marg_list tCOMMA tSTAR f_norm_arg { args, _, _, splat = val result = block_var args, "*#{splat}".to_sym } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 } | f_marg_list tCOMMA tSTAR { args, _, _ = val result = block_var args, :* } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { args, _, _, _, args2 = val result = block_var args, :*, args2 } | tSTAR f_norm_arg { _, splat = val result = block_var :"*#{splat}" } | tSTAR f_norm_arg tCOMMA f_marg_list { _, splat, _, args = val result = block_var :"*#{splat}", args } | tSTAR { result = block_var :* } | tSTAR tCOMMA f_marg_list { _, _, args = val result = block_var :*, args } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = call_args val } | f_block_kwarg opt_f_block_arg { result = call_args val } | f_kwrest opt_f_block_arg { result = call_args val } | f_block_arg { result = call_args val } opt_block_args_tail: tCOMMA block_args_tail { result = args val } | none block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_block_optarg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_rest_arg opt_block_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | block_args_tail { result = args val } opt_block_param: none { result = 0 } | block_param_def block_param_def: tPIPE opt_bv_decl tPIPE { result = args val } | tOROP { self.lexer.command_start = true result = s(:args) } | tPIPE block_param opt_bv_decl tPIPE { result = args val } opt_bv_decl: opt_nl | opt_nl tSEMI bv_decls opt_nl { result = args val } bv_decls: bvar { result = args val } | bv_decls tCOMMA bvar { result = args val } bvar: tIDENTIFIER { result = s(:shadow, val[0].to_sym) } | f_bad_arg lambda: { self.env.extend :dynamic result = self.lexer.lineno result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } f_larglist lambda_body { lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body self.env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl rparen { result = args val } | f_args { result = val[0] result = 0 if result == s(:args) } lambda_body: tLAMBEG compstmt tRCURLY { result = val[1] } | kDO_LAMBDA compstmt kEND { result = val[1] } do_block: kDO_BLOCK { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend } block_call: command do_block { # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] } | block_call dot_or_colon operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } | block_call dot_or_colon operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } | block_call dot_or_colon operation2 command_args do_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } method_call: fcall { result = self.lexer.lineno } paren_args { args = self.call_args val[2..-1] result = val[0].concat args.sexp_body } | primary_value call_op operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value tCOLON2 operation2 paren_args { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation3 { result = new_call val[0], val[2].to_sym } | primary_value call_op paren_args { result = new_call val[0], :call, val[2], val[1] } | primary_value tCOLON2 paren_args { result = new_call val[0], :call, val[2] } | kSUPER paren_args { result = new_super val[1] } | kSUPER { result = s(:zsuper) } | primary_value tLBRACK2 opt_call_args rbracket { result = new_aref val } brace_block: tLCURLY { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } | kDO { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } case_body: kWHEN { result = self.lexer.lineno } args then compstmt cases { result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] } cases: opt_else | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above } | { result = nil } exc_list: arg_value { result = s(:array, val[0]) } | mrhs | none exc_var: tASSOC lhs { result = val[1] } | none opt_ensure: kENSURE compstmt { _, body = val result = body || s(:nil) } | none literal: numeric { result = s(:lit, val[0]) } | symbol { result = s(:lit, val[0]) } | dsym strings: string { val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] } string: tCHAR { debug20 23, val, result } | string1 | string string1 { result = self.literal_concat val[0], val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = val[1] } | tSTRING { result = new_string val } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = new_xstring val[1] } regexp: tREGEXP_BEG regexp_contents tREGEXP_END { result = new_regexp val } words: tWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tWORDS_BEG word_list tSTRING_END { result = val[1] } word_list: none { result = new_word_list } | word_list word tSPACE { result = val[0].dup << new_word_list_entry(val) } word: string_content | word string_content { result = self.literal_concat val[0], val[1] } symbols: tSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tSYMBOLS_BEG symbol_list tSTRING_END { result = val[1] } symbol_list: none { result = new_symbol_list } | symbol_list word tSPACE { result = val[0].dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tQWORDS_BEG qword_list tSTRING_END { result = val[1] } qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tQSYMBOLS_BEG qsym_list tSTRING_END { result = val[1] } qword_list: none { result = new_qword_list } | qword_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qword_list_entry(val) } qsym_list: none { result = new_qsym_list } | qsym_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qsym_list_entry(val) } string_contents: none { result = s(:str, "") } | string_contents string_content { result = literal_concat(val[0], val[1]) } xstring_contents: none { result = nil } | xstring_contents string_content { result = literal_concat(val[0], val[1]) } regexp_contents: none { result = nil } | regexp_contents string_content { result = literal_concat(val[0], val[1]) } string_content: tSTRING_CONTENT { result = new_string val } | tSTRING_DVAR { result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg # TODO: expr_value ? } string_dvar { lexer.lex_strterm = val[1] result = s(:evstr, val[2]) } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store, lexer.lex_state, ] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_value } compstmt tRCURLY { # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg lexer.lex_state = oldlex_state case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else debug20 25 raise "unknown string body: #{stmt.inspect}" end } string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } | tIVAR { result = s(:ivar, val[0].to_sym) } | tCVAR { result = s(:cvar, val[0].to_sym) } | backref symbol: tSYMBEG sym { lexer.lex_state = :expr_end result = val[1].to_sym } | tSYMBOL { result = val[0].to_sym } sym: fname | tIVAR | tGVAR | tCVAR dsym: tSYMBEG xstring_contents tSTRING_END { lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) when :evstr then result = s(:dsym, "", result) else debug20 26, val, result end } numeric: simple_numeric | tUMINUS_NUM simple_numeric { result = -val[1] # TODO: pt_testcase } simple_numeric: tINTEGER | tFLOAT | tRATIONAL | tIMAGINARY user_variable: tIDENTIFIER | tIVAR | tGVAR | tCONSTANT | tCVAR keyword_variable: kNIL { result = s(:nil) } | kSELF { result = s(:self) } | kTRUE { result = s(:true) } | kFALSE { result = s(:false) } | k__FILE__ { result = s(:str, self.file) } | k__LINE__ { result = s(:lit, lexer.lineno) } | k__ENCODING__ { result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end } var_ref: user_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } | keyword_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } var_lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 29, val, result } backref: tNTH_REF { result = s(:nth_ref, val[0]) } | tBACK_REF { result = s(:back_ref, val[0]) } superclass: term { result = nil } | tLT { lexer.lex_state = :expr_beg } expr_value term { result = val[2] } | error term { yyerrok result = nil debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] self.lexer.lex_state = :expr_beg self.lexer.command_start = true # TODO: # $$ = parser->parser_in_kwarg; # parser->parser_in_kwarg = 1; } | f_args term { # TODO: parser->parser_in_kwarg = $1; result = val[0] self.lexer.lex_state = :expr_beg self.lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = args val } | f_kwarg opt_f_block_arg { result = args val } | f_kwrest opt_f_block_arg { result = args val } | f_block_arg opt_args_tail: tCOMMA args_tail { result = val[1] } | { result = nil } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_optarg opt_args_tail { result = args val } | f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_rest_arg opt_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | args_tail { result = args val } | { result = args val } f_bad_arg: tCONSTANT { yyerror "formal argument cannot be a constant" } | tIVAR { yyerror "formal argument cannot be an instance variable" } | tGVAR { yyerror "formal argument cannot be a global variable" } | tCVAR { yyerror "formal argument cannot be a class variable" } f_norm_arg: f_bad_arg | tIDENTIFIER { identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier } f_arg_asgn: f_norm_arg f_arg_item: f_arg_asgn | tLPAREN f_margs rparen { result = val[1] } f_arg: f_arg_item { case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end } | f_arg tCOMMA f_arg_item { list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item } f_label: tLABEL f_kw: f_label arg_value { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } | f_label { label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) } f_block_kw: f_label primary_value { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } | f_label { label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) } f_block_kwarg: f_block_kw | f_block_kwarg tCOMMA f_block_kw { list, _, item = val result = list << item.last } f_kwarg: f_kw | f_kwarg tCOMMA f_kw { result = args val } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { result = :"**#{val[1]}" } | kwrest_mark { result = :"**" } f_opt: f_arg_asgn tEQL arg_value { result = self.assignable val[0], val[2] # TODO: detect duplicate names } f_block_opt: f_arg_asgn tEQL primary_value { result = self.assignable val[0], val[2] } f_block_optarg: f_block_opt { result = s(:block, val[0]) } | f_block_optarg tCOMMA f_block_opt { result = val[0] result << val[2] } f_optarg: f_opt { result = s(:block, val[0]) } | f_optarg tCOMMA f_opt { result = self.block_append val[0], val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" } | restarg_mark { name = :"*" self.env[name] = :lvar result = name } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym } opt_f_block_arg: tCOMMA f_block_arg { result = val[1] } | { result = nil } singleton: var_ref | tLPAREN2 { lexer.lex_state = :expr_beg } expr rparen { result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit } assoc_list: none # [!nil] { result = s(:array) } | assocs trailer # [!nil] { result = val[0] } assocs: assoc | assocs tCOMMA assoc { list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash } assoc: arg_value tASSOC arg_value { result = s(:array, val[0], val[2]) } | tLABEL opt_nl arg_value { result = s(:array, s(:lit, val[0][0].to_sym), val.last) } | tSTRING_BEG string_contents tLABEL_END arg_value { _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value) } | tSYMBOL arg_value { raise "not yet: #{val.inspect}" # result = s(:array, s(:lit, val[1].to_sym), val[1]) } | tDSTAR arg_value { result = s(:array, s(:kwsplat, val[1])) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 call_op: tDOT opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN rbracket: opt_nl tRBRACK trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI { yyerrok } none: { result = nil; } end ---- inner require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ruby_parser-3.11.0/lib/ruby19_parser.y0000444000004100000410000021301013277753330017635 0ustar www-datawww-data# -*- racc -*- class Ruby19Parser token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__ k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAST_TOKEN tLAMBDA tLAMBEG prechigh right tBANG tTILDE tUPLUS right tPOW right tUMINUS_NUM tUMINUS left tSTAR2 tDIVIDE tPERCENT left tPLUS tMINUS left tLSHFT tRSHFT left tAMPER2 left tPIPE tCARET left tGT tGEQ tLT tLEQ nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH left tANDOP left tOROP nonassoc tDOT2 tDOT3 right tEH tCOLON left kRESCUE_MOD right tEQL tOP_ASGN nonassoc kDEFINED right kNOT left kOR kAND nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD nonassoc tLBRACE_ARG nonassoc tLOWEST preclow rule program: { self.lexer.lex_state = :expr_beg } top_compstmt { result = new_compstmt val } top_compstmt: top_stmts opt_terms { result = val[0] } top_stmts: none | top_stmt | top_stmts terms top_stmt { result = self.block_append val[0], val[2] } | error top_stmt top_stmt: stmt | klBEGIN { if (self.in_def || self.in_single > 0) then yyerror "BEGIN in method" end self.env.extend } tLCURLY top_compstmt tRCURLY { result = new_iter s(:preexe), nil, val[3] } bodystmt: compstmt opt_rescue opt_else opt_ensure { result = new_body val } compstmt: stmts opt_terms { result = new_compstmt val } stmts: none | stmt | stmts terms stmt { result = self.block_append val[0], val[2] } | error stmt { result = val[1] } stmt: kALIAS fitem { lexer.lex_state = :expr_fname result = self.lexer.lineno } fitem { result = s(:alias, val[1], val[3]).line(val[2]) } | kALIAS tGVAR tGVAR { result = s(:valias, val[1].to_sym, val[2].to_sym) } | kALIAS tGVAR tBACK_REF { result = s(:valias, val[1].to_sym, :"$#{val[2]}") } | kALIAS tGVAR tNTH_REF { yyerror "can't make alias for the number variables" } | kUNDEF undef_list { result = val[1] } | stmt kIF_MOD expr_value { result = new_if val[2], val[0], nil } | stmt kUNLESS_MOD expr_value { result = new_if val[2], nil, val[0] } | stmt kWHILE_MOD expr_value { result = new_while val[0], val[2], true } | stmt kUNTIL_MOD expr_value { result = new_until val[0], val[2], true } | stmt kRESCUE_MOD stmt { result = s(:rescue, val[0], new_resbody(s(:array), val[2])) } | klEND tLCURLY compstmt tRCURLY { if (self.in_def || self.in_single > 0) then yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } | var_lhs tOP_ASGN command_call { result = new_op_asgn val } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) } | primary_value tDOT tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) } | backref tOP_ASGN command_call { self.backref_assign_error val[0] } | lhs tEQL mrhs { result = new_assign val[0], s(:svalue, val[2]) } | mlhs tEQL arg_value { result = new_masgn val[0], val[2], :wrap } | mlhs tEQL mrhs { result = new_masgn val[0], val[2] } | expr command_asgn: lhs tEQL command_call { result = new_assign val[0], val[2] } | lhs tEQL command_asgn { result = new_assign val[0], val[2] } expr: command_call | expr kAND expr { result = logical_op :and, val[0], val[2] } | expr kOR expr { result = logical_op :or, val[0], val[2] } | kNOT opt_nl expr { result = s(:call, val[2], :"!") } | tBANG command_call { result = s(:call, val[1], :"!") } | arg expr_value: expr { result = value_expr(val[0]) } command_call: command | block_command block_command: block_call | block_call tDOT operation2 command_args # TODO: dot_or_colon { result = new_call val[0], val[2].to_sym, val[3] } | block_call tCOLON2 operation2 command_args { result = new_call val[0], val[2].to_sym, val[3] } cmd_brace_block: tLBRACE_ARG { self.env.extend(:dynamic) result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend } command: operation command_args =tLOWEST { result = new_call nil, val[0].to_sym, val[1] } | operation command_args cmd_brace_block { result = new_call nil, val[0].to_sym, val[1] if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end } | primary_value tDOT operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tDOT operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block } | kSUPER command_args { result = new_super val[1] } | kYIELD command_args { result = new_yield val[1] } | kRETURN call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { line = val[0].last result = s(:break, ret_args(val[1])).line(line) } | kNEXT call_args { line = val[0].last result = s(:next, ret_args(val[1])).line(line) } mlhs: mlhs_basic | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { result = s(:masgn, s(:array, val[1])) } mlhs_basic: mlhs_head { result = s(:masgn, val[0]) } | mlhs_head mlhs_item { result = s(:masgn, val[0] << val[1].compact) } | mlhs_head tSTAR mlhs_node { result = s(:masgn, val[0] << s(:splat, val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary = list_append val[0], s(:splat, val[2]) ary.concat val[4].sexp_body result = s(:masgn, ary) } | mlhs_head tSTAR { result = s(:masgn, val[0] << s(:splat)) } | mlhs_head tSTAR tCOMMA mlhs_post { ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR mlhs_node { result = s(:masgn, s(:array, s(:splat, val[1]))) } | tSTAR mlhs_node tCOMMA mlhs_post { ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR { result = s(:masgn, s(:array, s(:splat))) } | tSTAR tCOMMA mlhs_post { ary = s(:array, s(:splat)) ary.concat val[2].sexp_body result = s(:masgn, ary) } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_head: mlhs_item tCOMMA { result = s(:array, val[0]) } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1].compact } mlhs_post: mlhs_item { result = s(:array, val[0]) } | mlhs_post tCOMMA mlhs_item { result = list_append val[0], val[2] } mlhs_node: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value tDOT tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value tDOT tCONSTANT { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value tDOT tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value tDOT tCONSTANT { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } cname: tIDENTIFIER { yyerror "class/module name must be CONSTANT" } | tCONSTANT cpath: tCOLON3 cname { result = s(:colon3, val[1].to_sym) } | cname { result = val[0].to_sym } | primary_value tCOLON2 cname { result = s(:colon2, val[0], val[2].to_sym) } fname: tIDENTIFIER | tCONSTANT | tFID | op { lexer.lex_state = :expr_end result = val[0] } | reswords { lexer.lex_state = :expr_end result = val[0] } fsym: fname | symbol fitem: fsym { result = s(:lit, val[0].to_sym) } | dsym undef_list: fitem { result = new_undef val[0] } | undef_list tCOMMA { lexer.lex_state = :expr_fname } fitem { result = new_undef val[0], val[3] } op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE | kCLASS | kDEF | kDEFINED | kDO | kELSE | kELSIF | kEND | kENSURE | kFALSE | kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT | kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL arg: lhs tEQL arg { result = new_assign val[0], val[2] } | lhs tEQL arg kRESCUE_MOD arg { result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) } | var_lhs tOP_ASGN arg { result = new_op_asgn val } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value tDOT tIDENTIFIER tOP_ASGN arg { result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) } | primary_value tDOT tCONSTANT tOP_ASGN arg { result = s(:op_asgn2, val[0], :"#{val[2]}=", val[3].to_sym, val[4]) } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | tCOLON3 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | backref tOP_ASGN arg { self.backref_assign_error val[0] } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end } | arg tPLUS arg { result = new_call val[0], :+, argl(val[2]) } | arg tMINUS arg { result = new_call val[0], :-, argl(val[2]) } | arg tSTAR2 arg { result = new_call val[0], :*, argl(val[2]) } | arg tDIVIDE arg { result = new_call val[0], :"/", argl(val[2]) } | arg tPERCENT arg { result = new_call val[0], :"%", argl(val[2]) } | arg tPOW arg { result = new_call val[0], :**, argl(val[2]) } | tUMINUS_NUM tINTEGER tPOW arg { result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") } | tUMINUS_NUM tFLOAT tPOW arg { result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") } | tUPLUS arg { result = new_call val[1], :"+@" } | tUMINUS arg { result = new_call val[1], :"-@" } | arg tPIPE arg { result = new_call val[0], :"|", argl(val[2]) } | arg tCARET arg { result = new_call val[0], :"^", argl(val[2]) } | arg tAMPER2 arg { result = new_call val[0], :"&", argl(val[2]) } | arg tCMP arg { result = new_call val[0], :"<=>", argl(val[2]) } | arg tGT arg { result = new_call val[0], :">", argl(val[2]) } | arg tGEQ arg { result = new_call val[0], :">=", argl(val[2]) } | arg tLT arg { result = new_call val[0], :"<", argl(val[2]) } | arg tLEQ arg { result = new_call val[0], :"<=", argl(val[2]) } | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) } | arg tEQQ arg { result = new_call val[0], :"===", argl(val[2]) } | arg tNEQ arg { result = new_call val[0], :"!=", argl(val[2]) } | arg tMATCH arg { result = new_match val[0], val[2] } | arg tNMATCH arg { result = s(:not, new_match(val[0], val[2])) } | tBANG arg { result = new_call val[1], :"!" } | tTILDE arg { val[2] = value_expr val[2] result = new_call val[1], :"~" } | arg tLSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) } | arg tRSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) } | arg tANDOP arg { result = logical_op :and, val[0], val[2] } | arg tOROP arg { result = logical_op :or, val[0], val[2] } | kDEFINED opt_nl arg { result = s(:defined, val[2]) } | arg tEH arg opt_nl tCOLON arg { result = s(:if, val[0], val[2], val[5]) } | primary arg_value: arg { result = value_expr(val[0]) } aref_args: none | args trailer { result = val[0] } | args tCOMMA assocs trailer { result = val[0] << s(:hash, *val[2].values) } | assocs trailer { result = s(:array, s(:hash, *val[0].values)) } paren_args: tLPAREN2 opt_call_args rparen { result = val[1] } opt_paren_args: none | paren_args opt_call_args: none { result = val[0] } | call_args { result = val[0] } | args tCOMMA { result = val[0] } | args tCOMMA assocs tCOMMA { result = val[0] << s(:hash, *val[2].sexp_body) # TODO: self.args } | assocs tCOMMA { result = s(:hash, *val[0].values) } call_args: command { warning "parenthesize argument(s) for future version" result = s(:array, val[0]) } | args opt_block_arg { result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { result = s(:array, s(:hash, *val[0].values)) result = self.arg_blk_pass result, val[1] } | args tCOMMA assocs opt_block_arg { result = val[0] << s(:hash, *val[2].values) result = self.arg_blk_pass result, val[3] } | block_arg command_args: { result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true } call_args { lexer.cmdarg.stack.replace val[0] result = val[1] } block_arg: tAMPER arg_value { result = s(:block_pass, val[1]) } opt_block_arg: tCOMMA block_arg { result = val[1] } | none args: arg_value { result = s(:array, val[0]) } | tSTAR arg_value { result = s(:array, s(:splat, val[1])) } | args tCOMMA arg_value { result = self.list_append val[0], val[2] } | args tCOMMA tSTAR arg_value { result = self.list_append val[0], s(:splat, val[3]) } mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = self.arg_concat val[0], val[3] } | tSTAR arg_value { result = s(:splat, val[1]) } primary: literal | strings | xstring | regexp | words | qwords | var_ref | backref | tFID { result = new_call nil, val[0].to_sym } | kBEGIN { result = self.lexer.lineno } bodystmt kEND { unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] } | tLPAREN_ARG expr { lexer.lex_state = :expr_endarg } rparen { warning "(...) interpreted as grouped expression" result = val[1] } | tLPAREN compstmt tRPAREN { result = val[1] || s(:nil) result.paren = true } | primary_value tCOLON2 tCONSTANT { result = s(:colon2, val[0], val[2].to_sym) } | tCOLON3 tCONSTANT { result = s(:colon3, val[1].to_sym) } | tLBRACK aref_args tRBRACK { result = val[1] || s(:array) } | tLBRACE { result = self.lexer.lineno } assoc_list tRCURLY { result = new_hash val } | kRETURN { result = s(:return) } | kYIELD tLPAREN2 call_args rparen { result = new_yield val[2] } | kYIELD tLPAREN2 rparen { result = new_yield } | kYIELD { result = new_yield } | kDEFINED opt_nl tLPAREN2 expr rparen { result = s(:defined, val[3]) } | kNOT tLPAREN2 expr rparen { result = s(:call, val[2], :"!") } | kNOT tLPAREN2 rparen { raise "no3\non#{val.inspect}" } | operation brace_block { oper, iter = val[0], val[1] call = new_call nil, oper.to_sym iter.insert 1, call result = iter call.line = iter.line } | method_call | method_call brace_block { call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter } | tLAMBDA lambda { result = val[1] # TODO: fix lineno } | kIF expr_value then compstmt if_tail kEND { result = new_if val[1], val[3], val[4] } | kUNLESS expr_value then compstmt opt_else kEND { result = new_if val[1], val[4], val[3] } | kWHILE { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_while val[5], val[2], true } | kUNTIL { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_until val[5], val[2], true } | kCASE expr_value opt_terms case_body kEND { (_, line), expr, _, body, _ = val result = new_case expr, body, line } | kCASE opt_terms case_body kEND { (_, line), _, body, _ = val result = new_case nil, body, line } | kFOR for_var kIN { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_for val[4], val[1], val[7] } | kCLASS { result = self.lexer.lineno } cpath superclass { self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend } bodystmt kEND { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kCLASS tLSHFT { result = self.lexer.lineno } expr { result = self.in_def self.in_def = false } term { result = self.in_single self.in_single = 0 self.env.extend } bodystmt kEND { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kMODULE { result = self.lexer.lineno } cpath { self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend } bodystmt kEND { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kDEF fname { result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body } | kDEF singleton dot_or_colon { self.comments.push self.lexer.comments lexer.lex_state = :expr_fname } fname { self.in_single += 1 self.env.extend lexer.lex_state = :expr_end # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body } | kBREAK { result = s(:break) } | kNEXT { result = s(:next) } | kREDO { result = s(:redo) } | kRETRY { result = s(:retry) } primary_value: primary { result = value_expr(val[0]) } # These are really stupid k_begin: kBEGIN k_if: kIF k_unless: kUNLESS k_while: kWHILE k_until: kUNTIL k_case: kCASE k_for: kFOR k_class: kCLASS k_module: kMODULE k_def: kDEF k_end: kEND then: term | kTHEN | term kTHEN do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { result = s(:if, val[1], val[3], val[4]) } opt_else: none | kELSE compstmt { result = val[1] } for_var: lhs | mlhs { val[0].delete_at 1 if val[0][1].nil? # HACK } f_marg: f_norm_arg | tLPAREN f_margs rparen { result = val[1] } f_marg_list: f_marg { result = s(:array, val[0]) } | f_marg_list tCOMMA f_marg { result = list_append val[0], val[2] } f_margs: f_marg_list { args, = val result = block_var args } | f_marg_list tCOMMA tSTAR f_norm_arg { args, _, _, splat = val result = block_var args, "*#{splat}".to_sym } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 } | f_marg_list tCOMMA tSTAR { args, _, _ = val result = block_var args, :* } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { args, _, _, _, args2 = val result = block_var args, :*, args2 } | tSTAR f_norm_arg { _, splat = val result = block_var :"*#{splat}" } | tSTAR f_norm_arg tCOMMA f_marg_list { _, splat, _, args = val result = block_var :"*#{splat}", args } | tSTAR { result = block_var :* } | tSTAR tCOMMA f_marg_list { _, _, args = val result = block_var :*, args } block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_f_block_arg { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = args val } | f_arg tCOMMA f_block_optarg opt_f_block_arg { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_f_block_arg { result = args val } | f_arg tCOMMA f_rest_arg opt_f_block_arg { result = args val } | f_arg tCOMMA { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = args val } | f_arg opt_f_block_arg { result = args val } | f_block_optarg tCOMMA f_rest_arg opt_f_block_arg { result = args val } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = args val } | f_block_optarg opt_f_block_arg { result = args val } | f_block_optarg tCOMMA f_arg opt_f_block_arg { result = args val } | f_rest_arg opt_f_block_arg { result = args val } | f_rest_arg tCOMMA f_arg opt_f_block_arg { result = args val } | f_block_arg { result = args val } opt_block_param: none { result = 0 } | block_param_def block_param_def: tPIPE opt_bv_decl tPIPE { result = args val } | tOROP { result = s(:args) self.lexer.command_start = true } | tPIPE block_param opt_bv_decl tPIPE { result = args val } opt_bv_decl: none | tSEMI bv_decls { result = val[1] } bv_decls: bvar { result = args val } | bv_decls tCOMMA bvar { result = args val } bvar: tIDENTIFIER { result = s(:shadow, val[0].to_sym) } | f_bad_arg lambda: { # TODO: dyna_push ? hrm result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } f_larglist lambda_body { lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body } f_larglist: tLPAREN2 f_args opt_bv_decl rparen { result = args val } | f_args { result = val[0] result = 0 if result == s(:args) } lambda_body: tLAMBEG compstmt tRCURLY { result = val[1] } | kDO_LAMBDA compstmt kEND { result = val[1] } do_block: kDO_BLOCK { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend } block_call: command do_block { # TODO: # if (nd_type($1) == NODE_YIELD) { # compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] } | block_call tDOT operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } | block_call tCOLON2 operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } method_call: operation { result = self.lexer.lineno } paren_args { result = new_call nil, val[0].to_sym, val[2] } | primary_value tDOT operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation2 paren_args { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation3 { result = new_call val[0], val[2].to_sym } | primary_value tDOT paren_args { result = new_call val[0], :call, val[2] } | primary_value tCOLON2 paren_args { result = new_call val[0], :call, val[2] } | kSUPER paren_args { result = new_super val[1] } | kSUPER { result = s(:zsuper) } | primary_value tLBRACK2 opt_call_args rbracket { result = new_aref val } brace_block: tLCURLY { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } | kDO { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } case_body: kWHEN { result = self.lexer.lineno } args then compstmt cases { result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] } cases: opt_else | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above } | { result = nil } exc_list: arg_value { result = s(:array, val[0]) } | mrhs | none exc_var: tASSOC lhs { result = val[1] } | none opt_ensure: kENSURE compstmt { _, body = val result = body || s(:nil) } | none literal: numeric { result = s(:lit, val[0]) } | symbol { result = s(:lit, val[0]) } | dsym strings: string { val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] } string: string1 | string string1 { result = self.literal_concat val[0], val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = val[1] } | tSTRING { result = new_string val } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = new_xstring val[1] } regexp: tREGEXP_BEG regexp_contents tREGEXP_END { result = new_regexp val } words: tWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tWORDS_BEG word_list tSTRING_END { result = val[1] } word_list: none { result = new_word_list } | word_list word tSPACE { result = val[0] << new_word_list_entry(val) } word: string_content | word string_content { result = self.literal_concat val[0], val[1] } qwords: tQWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tQWORDS_BEG qword_list tSTRING_END { result = val[1] } qword_list: none { result = new_qword_list } | qword_list tSTRING_CONTENT tSPACE { result = val[0] << new_qword_list_entry(val) } string_contents: none { result = s(:str, "") } | string_contents string_content { result = literal_concat(val[0], val[1]) } xstring_contents: none { result = nil } | xstring_contents string_content { result = literal_concat(val[0], val[1]) } regexp_contents: none { result = nil } | regexp_contents string_content { result = literal_concat(val[0], val[1]) } string_content: tSTRING_CONTENT { result = new_string val } | tSTRING_DVAR { result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg } string_dvar { lexer.lex_strterm = val[1] result = s(:evstr, val[2]) } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_beg } compstmt tRCURLY { _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else raise "unknown string body: #{stmt.inspect}" end } string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } | tIVAR { result = s(:ivar, val[0].to_sym) } | tCVAR { result = s(:cvar, val[0].to_sym) } | backref symbol: tSYMBEG sym { lexer.lex_state = :expr_end result = val[1].to_sym } | tSYMBOL { result = val[0].to_sym } sym: fname | tIVAR | tGVAR | tCVAR dsym: tSYMBEG xstring_contents tSTRING_END { lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.intern) else result = s(:dsym, "", result) end } numeric: tINTEGER | tFLOAT | tUMINUS_NUM tINTEGER =tLOWEST { result = -val[1] # TODO: pt_testcase } | tUMINUS_NUM tFLOAT =tLOWEST { result = -val[1] # TODO: pt_testcase } user_variable: tIDENTIFIER | tIVAR | tGVAR | tCONSTANT | tCVAR keyword_variable: kNIL { result = s(:nil) } | kSELF { result = s(:self) } | kTRUE { result = s(:true) } | kFALSE { result = s(:false) } | k__FILE__ { result = s(:str, self.file) } | k__LINE__ { result = s(:lit, lexer.lineno) } | k__ENCODING__ { result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end } var_ref: user_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } | keyword_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } var_lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] } backref: tNTH_REF { result = s(:nth_ref, val[0]) } | tBACK_REF { result = s(:back_ref, val[0]) } superclass: term { result = nil } | tLT { lexer.lex_state = :expr_beg } expr_value term { result = val[2] } | error term { yyerrok result = nil } f_arglist: tLPAREN2 f_args rparen { result = val[1] lexer.lex_state = :expr_beg self.lexer.command_start = true } | f_args term { result = val[0] } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_f_block_arg { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = args val } | f_arg tCOMMA f_optarg opt_f_block_arg { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_f_block_arg { result = args val } | f_arg tCOMMA f_rest_arg opt_f_block_arg { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = args val } | f_arg opt_f_block_arg { result = args val } | f_optarg tCOMMA f_rest_arg opt_f_block_arg { result = args val } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_f_block_arg { result = args val } | f_optarg opt_f_block_arg { result = args val } | f_optarg tCOMMA f_arg opt_f_block_arg { result = args val } | f_rest_arg opt_f_block_arg { result = args val } | f_rest_arg tCOMMA f_arg opt_f_block_arg { result = args val } | f_block_arg { result = args val } | { result = args val } f_bad_arg: tCONSTANT { yyerror "formal argument cannot be a constant" } | tIVAR { yyerror "formal argument cannot be an instance variable" } | tGVAR { yyerror "formal argument cannot be a global variable" } | tCVAR { yyerror "formal argument cannot be a class variable" } f_norm_arg: f_bad_arg | tIDENTIFIER { identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier } f_arg_item: f_norm_arg | tLPAREN f_margs rparen { result = val[1] } f_arg: f_arg_item { case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else raise "Unknown f_arg type: #{val.inspect}" end } | f_arg tCOMMA f_arg_item { list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item } f_opt: tIDENTIFIER tEQL arg_value { result = self.assignable val[0], val[2] # TODO: detect duplicate names } f_block_opt: tIDENTIFIER tEQL primary_value { result = self.assignable val[0], val[2] } f_block_optarg: f_block_opt { result = s(:block, val[0]) } | f_block_optarg tCOMMA f_block_opt { result = val[0] result << val[2] } f_optarg: f_opt { result = s(:block, val[0]) } | f_optarg tCOMMA f_opt { result = self.block_append val[0], val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" } | restarg_mark { name = :"*" self.env[name] = :lvar result = name } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym } opt_f_block_arg: tCOMMA f_block_arg { result = val[1] } | { result = nil } singleton: var_ref | tLPAREN2 { lexer.lex_state = :expr_beg } expr rparen { result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit } assoc_list: none # [!nil] { result = s(:array) } | assocs trailer # [!nil] { result = val[0] } assocs: assoc | assocs tCOMMA assoc { list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list } assoc: arg_value tASSOC arg_value { result = s(:array, val[0], val[2]) } | tLABEL opt_nl arg_value { label, _ = val[0] # TODO: fix lineno? result = s(:array, s(:lit, label.to_sym), val.last) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN rbracket: opt_nl tRBRACK trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI { yyerrok } none: { result = nil } end ---- inner require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ruby_parser-3.11.0/lib/ruby_parser.yy0000444000004100000410000023741613277753330017674 0ustar www-datawww-data# -*- racc -*- #if V==20 class Ruby20Parser #elif V==21 class Ruby21Parser #elif V == 22 class Ruby22Parser #elif V == 23 class Ruby23Parser #elif V == 24 class Ruby24Parser #elif V == 25 class Ruby25Parser #else fail "version not specified or supported on code generation" #endif token kCLASS kMODULE kDEF kUNDEF kBEGIN kRESCUE kENSURE kEND kIF kUNLESS kTHEN kELSIF kELSE kCASE kWHEN kWHILE kUNTIL kFOR kBREAK kNEXT kREDO kRETRY kIN kDO kDO_COND kDO_BLOCK kDO_LAMBDA kRETURN kYIELD kSUPER kSELF kNIL kTRUE kFALSE kAND kOR kNOT kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD kRESCUE_MOD kALIAS kDEFINED klBEGIN klEND k__LINE__ k__FILE__ k__ENCODING__ tIDENTIFIER tFID tGVAR tIVAR tCONSTANT tLABEL tCVAR tNTH_REF tBACK_REF tSTRING_CONTENT tINTEGER tFLOAT tREGEXP_END tUPLUS tUMINUS tUMINUS_NUM tPOW tCMP tEQ tEQQ tNEQ tGEQ tLEQ tANDOP tOROP tMATCH tNMATCH tDOT tDOT2 tDOT3 tAREF tASET tLSHFT tRSHFT tCOLON2 tCOLON3 tOP_ASGN tASSOC tLPAREN tLPAREN2 tRPAREN tLPAREN_ARG tLBRACK tLBRACK2 tRBRACK tLBRACE tLBRACE_ARG tSTAR tSTAR2 tAMPER tAMPER2 tTILDE tPERCENT tDIVIDE tPLUS tMINUS tLT tGT tPIPE tBANG tCARET tLCURLY tRCURLY tBACK_REF2 tSYMBEG tSTRING_BEG tXSTRING_BEG tREGEXP_BEG tWORDS_BEG tQWORDS_BEG tSTRING_DBEG tSTRING_DVAR tSTRING_END tSTRING tSYMBOL tNL tEH tCOLON tCOMMA tSPACE tSEMI tLAMBDA tLAMBEG tDSTAR tCHAR tSYMBOLS_BEG tQSYMBOLS_BEG tSTRING_DEND tUBANG #if V >= 21 tRATIONAL tIMAGINARY #endif #if V >= 22 tLABEL_END #endif #if V >= 23 tLONELY #endif prechigh right tBANG tTILDE tUPLUS right tPOW right tUMINUS_NUM tUMINUS left tSTAR2 tDIVIDE tPERCENT left tPLUS tMINUS left tLSHFT tRSHFT left tAMPER2 left tPIPE tCARET left tGT tGEQ tLT tLEQ nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH left tANDOP left tOROP nonassoc tDOT2 tDOT3 right tEH tCOLON left kRESCUE_MOD right tEQL tOP_ASGN nonassoc kDEFINED right kNOT left kOR kAND nonassoc kIF_MOD kUNLESS_MOD kWHILE_MOD kUNTIL_MOD nonassoc tLBRACE_ARG nonassoc tLOWEST preclow rule program: { self.lexer.lex_state = :expr_beg } top_compstmt { result = new_compstmt val } top_compstmt: top_stmts opt_terms { result = val[0] } top_stmts: none | top_stmt | top_stmts terms top_stmt { result = self.block_append val[0], val[2] } | error top_stmt top_stmt: stmt { result = val[0] # TODO: remove once I have more confidence this is fixed # result.each_of_type :call_args do |s| # debug20 666, s, result # end } | klBEGIN { if (self.in_def || self.in_single > 0) then debug20 1 yyerror "BEGIN in method" end self.env.extend } tLCURLY top_compstmt tRCURLY { result = new_iter s(:preexe), nil, val[3] } bodystmt: compstmt opt_rescue opt_else opt_ensure { result = new_body val } compstmt: stmts opt_terms { result = new_compstmt val } stmts: none | stmt | stmts terms stmt { result = self.block_append val[0], val[2] } | error stmt { result = val[1] debug20 2, val, result } stmt: kALIAS fitem { lexer.lex_state = :expr_fname result = self.lexer.lineno } fitem { result = s(:alias, val[1], val[3]).line(val[2]) } | kALIAS tGVAR tGVAR { result = s(:valias, val[1].to_sym, val[2].to_sym) } | kALIAS tGVAR tBACK_REF { result = s(:valias, val[1].to_sym, :"$#{val[2]}") } | kALIAS tGVAR tNTH_REF { yyerror "can't make alias for the number variables" } | kUNDEF undef_list { result = val[1] } | stmt kIF_MOD expr_value { result = new_if val[2], val[0], nil } | stmt kUNLESS_MOD expr_value { result = new_if val[2], nil, val[0] } | stmt kWHILE_MOD expr_value { result = new_while val[0], val[2], true } | stmt kUNTIL_MOD expr_value { result = new_until val[0], val[2], true } | stmt kRESCUE_MOD stmt { result = s(:rescue, val[0], new_resbody(s(:array), val[2])) } | klEND tLCURLY compstmt tRCURLY { if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] } | command_asgn | mlhs tEQL command_call { result = new_masgn val[0], val[2], :wrap } | var_lhs tOP_ASGN command_call { result = new_op_asgn val } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN command_call { result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value call_op tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line } | primary_value tCOLON2 tCONSTANT tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 4, val, result } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN command_call { result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 5, val, result } | backref tOP_ASGN command_call { self.backref_assign_error val[0] } | lhs tEQL mrhs { result = new_assign val[0], s(:svalue, val[2]) } #if V == 20 | mlhs tEQL arg_value { result = new_masgn val[0], val[2], :wrap } | mlhs tEQL mrhs #else | mlhs tEQL mrhs_arg #endif { result = new_masgn val[0], val[2] } | expr command_asgn: lhs tEQL command_call { result = new_assign val[0], val[2] } | lhs tEQL command_asgn { result = new_assign val[0], val[2] } expr: command_call | expr kAND expr { result = logical_op :and, val[0], val[2] } | expr kOR expr { result = logical_op :or, val[0], val[2] } | kNOT opt_nl expr { result = s(:call, val[2], :"!") } | tBANG command_call { result = s(:call, val[1], :"!") } | arg expr_value: expr { result = value_expr(val[0]) } command_call: command | block_command block_command: block_call | block_call dot_or_colon operation2 command_args { result = new_call val[0], val[2].to_sym, val[3] } cmd_brace_block: tLBRACE_ARG { self.env.extend(:dynamic) result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend } fcall: operation { result = new_call nil, val[0].to_sym } command: fcall command_args =tLOWEST { result = val[0].concat val[1].sexp_body # REFACTOR pattern } | fcall command_args cmd_brace_block { result = val[0].concat val[1].sexp_body if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end } | primary_value call_op operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value call_op operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] block_dup_check call, block block.insert 1, call result = block } | primary_value tCOLON2 operation2 command_args =tLOWEST { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation2 command_args cmd_brace_block { recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block } | kSUPER command_args { result = new_super val[1] } | kYIELD command_args { result = new_yield val[1] } | kRETURN call_args { line = val[0].last result = s(:return, ret_args(val[1])).line(line) } | kBREAK call_args { line = val[0].last result = s(:break, ret_args(val[1])).line(line) } | kNEXT call_args { line = val[0].last result = s(:next, ret_args(val[1])).line(line) } mlhs: mlhs_basic | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_inner: mlhs_basic | tLPAREN mlhs_inner rparen { result = s(:masgn, s(:array, val[1])) } mlhs_basic: mlhs_head { result = s(:masgn, val[0]) } | mlhs_head mlhs_item { result = s(:masgn, val[0] << val[1].compact) } | mlhs_head tSTAR mlhs_node { result = s(:masgn, val[0] << s(:splat, val[2])) } | mlhs_head tSTAR mlhs_node tCOMMA mlhs_post { ary1, _, splat, _, ary2 = val result = list_append ary1, s(:splat, splat) result.concat ary2.sexp_body result = s(:masgn, result) } | mlhs_head tSTAR { result = s(:masgn, val[0] << s(:splat)) } | mlhs_head tSTAR tCOMMA mlhs_post { ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR mlhs_node { result = s(:masgn, s(:array, s(:splat, val[1]))) } | tSTAR mlhs_node tCOMMA mlhs_post { ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) } | tSTAR { result = s(:masgn, s(:array, s(:splat))) } | tSTAR tCOMMA mlhs_post { result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) } mlhs_item: mlhs_node | tLPAREN mlhs_inner rparen { result = val[1] } mlhs_head: mlhs_item tCOMMA { result = s(:array, val[0]) } | mlhs_head mlhs_item tCOMMA { result = val[0] << val[1].compact } mlhs_post: mlhs_item { result = s(:array, val[0]) } | mlhs_post tCOMMA mlhs_item { result = list_append val[0], val[2] } mlhs_node: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 9, val, result } | primary_value tLBRACK2 opt_call_args rbracket { result = self.aryset val[0], val[2] } | primary_value call_op tIDENTIFIER # REFACTOR { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tIDENTIFIER { result = s(:attrasgn, val[0], :"#{val[2]}=") } | primary_value call_op tCONSTANT # REFACTOR? { result = new_attrasgn val[0], val[2], val[1] } | primary_value tCOLON2 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) } | tCOLON3 tCONSTANT { if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) } | backref { self.backref_assign_error val[0] } cname: tIDENTIFIER { yyerror "class/module name must be CONSTANT" } | tCONSTANT cpath: tCOLON3 cname { result = s(:colon3, val[1].to_sym) } | cname { result = val[0].to_sym } | primary_value tCOLON2 cname { result = s(:colon2, val[0], val[2].to_sym) } fname: tIDENTIFIER | tCONSTANT | tFID | op { lexer.lex_state = :expr_end result = val[0] } | reswords { lexer.lex_state = :expr_end result = val[0] } fsym: fname | symbol fitem: fsym { result = s(:lit, val[0].to_sym) } | dsym undef_list: fitem { result = new_undef val[0] } | undef_list tCOMMA { lexer.lex_state = :expr_fname } fitem { result = new_undef val[0], val[3] } op: tPIPE | tCARET | tAMPER2 | tCMP | tEQ | tEQQ | tMATCH | tNMATCH | tGT | tGEQ | tLT | tLEQ | tNEQ | tLSHFT | tRSHFT | tPLUS | tMINUS | tSTAR2 | tSTAR | tDIVIDE | tPERCENT | tPOW | tDSTAR | tBANG | tTILDE | tUPLUS | tUMINUS | tAREF | tASET | tBACK_REF2 #if V == 20 | tUBANG #endif reswords: k__LINE__ | k__FILE__ | k__ENCODING__ | klBEGIN | klEND | kALIAS | kAND | kBEGIN | kBREAK | kCASE | kCLASS | kDEF | kDEFINED | kDO | kELSE | kELSIF | kEND | kENSURE | kFALSE | kFOR | kIN | kMODULE | kNEXT | kNIL | kNOT | kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD | kIF | kUNLESS | kWHILE | kUNTIL arg: lhs tEQL arg { result = new_assign val[0], val[2] } | lhs tEQL arg kRESCUE_MOD arg { result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) } | var_lhs tOP_ASGN arg { result = new_op_asgn val } | var_lhs tOP_ASGN arg kRESCUE_MOD arg { result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) } | primary_value tLBRACK2 opt_call_args rbracket tOP_ASGN arg { val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) } | primary_value call_op tIDENTIFIER tOP_ASGN arg { result = new_op_asgn2 val } | primary_value call_op tCONSTANT tOP_ASGN arg { result = new_op_asgn2 val } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN arg { result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) } | primary_value tCOLON2 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | tCOLON3 tCONSTANT tOP_ASGN arg { yyerror "constant re-assignment" } | backref tOP_ASGN arg { self.backref_assign_error val[0] } | arg tDOT2 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end } | arg tDOT3 arg { v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end } | arg tPLUS arg { result = new_call val[0], :+, argl(val[2]) } | arg tMINUS arg { result = new_call val[0], :-, argl(val[2]) } | arg tSTAR2 arg # TODO: rename { result = new_call val[0], :*, argl(val[2]) } | arg tDIVIDE arg { result = new_call val[0], :"/", argl(val[2]) } | arg tPERCENT arg { result = new_call val[0], :"%", argl(val[2]) } | arg tPOW arg { result = new_call val[0], :**, argl(val[2]) } #if V == 20 | tUMINUS_NUM tINTEGER tPOW arg { result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") } | tUMINUS_NUM tFLOAT tPOW arg #else | tUMINUS_NUM simple_numeric tPOW arg #endif { result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") #if V == 20 ## TODO: why is this 2.0 only? debug20 12, val, result #endif } | tUPLUS arg { result = new_call val[1], :"+@" } | tUMINUS arg { result = new_call val[1], :"-@" } | arg tPIPE arg { result = new_call val[0], :"|", argl(val[2]) } | arg tCARET arg { result = new_call val[0], :"^", argl(val[2]) } | arg tAMPER2 arg { result = new_call val[0], :"&", argl(val[2]) } | arg tCMP arg { result = new_call val[0], :"<=>", argl(val[2]) } | arg tGT arg { result = new_call val[0], :">", argl(val[2]) } | arg tGEQ arg { result = new_call val[0], :">=", argl(val[2]) } | arg tLT arg { result = new_call val[0], :"<", argl(val[2]) } | arg tLEQ arg { result = new_call val[0], :"<=", argl(val[2]) } | arg tEQ arg { result = new_call val[0], :"==", argl(val[2]) } | arg tEQQ arg { result = new_call val[0], :"===", argl(val[2]) } | arg tNEQ arg { result = new_call val[0], :"!=", argl(val[2]) } | arg tMATCH arg { result = new_match val[0], val[2] } | arg tNMATCH arg { result = s(:not, new_match(val[0], val[2])) } | tBANG arg { result = new_call val[1], :"!" } | tTILDE arg { result = new_call value_expr(val[1]), :"~" } | arg tLSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) } | arg tRSHFT arg { val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) } | arg tANDOP arg { result = logical_op :and, val[0], val[2] } | arg tOROP arg { result = logical_op :or, val[0], val[2] } | kDEFINED opt_nl arg { result = s(:defined, val[2]) } | arg tEH arg opt_nl tCOLON arg { result = s(:if, val[0], val[2], val[5]) } | primary arg_value: arg { result = value_expr(val[0]) } aref_args: none | args trailer { result = args [val[0]] } | args tCOMMA assocs trailer { result = args [val[0], array_to_hash(val[2])] } | assocs trailer { result = args [array_to_hash(val[0])] } paren_args: tLPAREN2 opt_call_args rparen { result = val[1] } opt_paren_args: none | paren_args opt_call_args: none { result = val[0] } | call_args { result = val[0] } | args tCOMMA { result = args val } | args tCOMMA assocs tCOMMA { result = args [val[0], array_to_hash(val[2])] } | assocs tCOMMA { result = args [array_to_hash(val[0])] } call_args: command { warning "parenthesize argument(s) for future version" result = call_args val } | args opt_block_arg { result = call_args val result = self.arg_blk_pass val[0], val[1] } | assocs opt_block_arg { result = call_args [array_to_hash(val[0])] result = self.arg_blk_pass result, val[1] } | args tCOMMA assocs opt_block_arg { result = call_args [val[0], array_to_hash(val[2])] result = self.arg_blk_pass result, val[3] } | block_arg { result = call_args val } command_args: { result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true } call_args { lexer.cmdarg.stack.replace val[0] result = val[1] } block_arg: tAMPER arg_value { result = s(:block_pass, val[1]) } opt_block_arg: tCOMMA block_arg { result = val[1] } | none args: arg_value { result = s(:array, val[0]) } | tSTAR arg_value { result = s(:array, s(:splat, val[1])) } | args tCOMMA arg_value { result = self.list_append val[0], val[2] } | args tCOMMA tSTAR arg_value { result = self.list_append val[0], s(:splat, val[3]) } #if V >= 21 mrhs_arg: mrhs { result = new_masgn_arg val[0] } | arg_value { result = new_masgn_arg val[0], :wrap } #endif mrhs: args tCOMMA arg_value { result = val[0] << val[2] } | args tCOMMA tSTAR arg_value { result = self.arg_concat val[0], val[3] } | tSTAR arg_value { result = s(:splat, val[1]) } primary: literal | strings | xstring | regexp | words | qwords | symbols | qsymbols | var_ref | backref | tFID { result = new_call nil, val[0].to_sym } | kBEGIN { result = self.lexer.lineno } bodystmt kEND { unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] } | tLPAREN_ARG rparen { debug20 13, val, result } | tLPAREN_ARG { result = self.lexer.cmdarg.stack.dup lexer.cmdarg.stack.replace [false] # TODO add api for these } expr { lexer.lex_state = :expr_endarg } rparen { warning "(...) interpreted as grouped expression" lexer.cmdarg.stack.replace val[1] result = val[2] } | tLPAREN compstmt tRPAREN { result = val[1] || s(:nil) result.paren = true } | primary_value tCOLON2 tCONSTANT { result = s(:colon2, val[0], val[2].to_sym) } | tCOLON3 tCONSTANT { result = s(:colon3, val[1].to_sym) } | tLBRACK aref_args tRBRACK { result = val[1] || s(:array) result.sexp_type = :array # aref_args is :args } | tLBRACE { result = self.lexer.lineno } assoc_list tRCURLY { result = new_hash val } | kRETURN { result = s(:return) } | kYIELD tLPAREN2 call_args rparen { result = new_yield val[2] } | kYIELD tLPAREN2 rparen { result = new_yield } | kYIELD { result = new_yield } | kDEFINED opt_nl tLPAREN2 expr rparen { result = s(:defined, val[3]) } | kNOT tLPAREN2 expr rparen { result = s(:call, val[2], :"!") } | kNOT tLPAREN2 rparen { debug20 14, val, result } | fcall brace_block { oper, iter = val[0], val[1] call = oper # FIX iter.insert 1, call result = iter call.line = iter.line } | method_call | method_call brace_block { call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter } | tLAMBDA lambda { result = val[1] # TODO: fix lineno } | kIF expr_value then compstmt if_tail kEND { result = new_if val[1], val[3], val[4] } | kUNLESS expr_value then compstmt opt_else kEND { result = new_if val[1], val[4], val[3] } | kWHILE { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_while val[5], val[2], true } | kUNTIL { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_until val[5], val[2], true } | kCASE expr_value opt_terms case_body kEND { (_, line), expr, _, body, _ = val result = new_case expr, body, line } | kCASE opt_terms case_body kEND { (_, line), _, body, _ = val result = new_case nil, body, line } | kFOR for_var kIN { lexer.cond.push true } expr_value do { lexer.cond.pop } compstmt kEND { result = new_for val[4], val[1], val[7] } | kCLASS { result = self.lexer.lineno } cpath superclass { self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend } bodystmt kEND { result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kCLASS tLSHFT { result = self.lexer.lineno } expr { result = self.in_def self.in_def = false } term { result = self.in_single self.in_single = 0 self.env.extend } bodystmt kEND { result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kMODULE { result = self.lexer.lineno } cpath { self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend } bodystmt kEND { result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body } | kDEF fname { result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend # TODO: local->cmdargs = cmdarg_stack; # TODO: port local_push_gen and local_pop_gen lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body } | kDEF singleton dot_or_colon { self.comments.push self.lexer.comments lexer.lex_state = :expr_fname } fname { self.in_single += 1 self.env.extend lexer.lex_state = :expr_endfn # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] } f_arglist bodystmt kEND { line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body } | kBREAK { result = s(:break) } | kNEXT { result = s(:next) } | kREDO { result = s(:redo) } | kRETRY { result = s(:retry) } primary_value: primary { result = value_expr(val[0]) } # These are really stupid k_begin: kBEGIN k_if: kIF k_unless: kUNLESS k_while: kWHILE k_until: kUNTIL k_case: kCASE k_for: kFOR k_class: kCLASS k_module: kMODULE k_def: kDEF k_end: kEND then: term | kTHEN | term kTHEN do: term | kDO_COND if_tail: opt_else | kELSIF expr_value then compstmt if_tail { result = s(:if, val[1], val[3], val[4]) } opt_else: none | kELSE compstmt { result = val[1] } for_var: lhs | mlhs { val[0].delete_at 1 if val[0][1].nil? # HACK } f_marg: f_norm_arg | tLPAREN f_margs rparen { result = val[1] } f_marg_list: f_marg { result = s(:array, val[0]) } | f_marg_list tCOMMA f_marg { result = list_append val[0], val[2] } f_margs: f_marg_list { args, = val result = block_var args } | f_marg_list tCOMMA tSTAR f_norm_arg { args, _, _, splat = val result = block_var args, "*#{splat}".to_sym } | f_marg_list tCOMMA tSTAR f_norm_arg tCOMMA f_marg_list { args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 } | f_marg_list tCOMMA tSTAR { args, _, _ = val result = block_var args, :* } | f_marg_list tCOMMA tSTAR tCOMMA f_marg_list { args, _, _, _, args2 = val result = block_var args, :*, args2 } | tSTAR f_norm_arg { _, splat = val result = block_var :"*#{splat}" } | tSTAR f_norm_arg tCOMMA f_marg_list { _, splat, _, args = val result = block_var :"*#{splat}", args } | tSTAR { result = block_var :* } | tSTAR tCOMMA f_marg_list { _, _, args = val result = block_var :*, args } block_args_tail: f_block_kwarg tCOMMA f_kwrest opt_f_block_arg { result = call_args val } | f_block_kwarg opt_f_block_arg { result = call_args val } | f_kwrest opt_f_block_arg { result = call_args val } | f_block_arg { result = call_args val } opt_block_args_tail: tCOMMA block_args_tail { result = args val } | none block_param: f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg opt_block_args_tail { result = args val } | f_arg tCOMMA f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_arg tCOMMA { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | f_block_optarg opt_block_args_tail { result = args val } | f_block_optarg tCOMMA f_arg opt_block_args_tail { result = args val } | f_rest_arg opt_block_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_block_args_tail { result = args val } | block_args_tail { result = args val } opt_block_param: none { result = 0 } | block_param_def block_param_def: tPIPE opt_bv_decl tPIPE { result = args val } | tOROP { self.lexer.command_start = true result = s(:args) } | tPIPE block_param opt_bv_decl tPIPE { result = args val } opt_bv_decl: opt_nl | opt_nl tSEMI bv_decls opt_nl { result = args val } bv_decls: bvar { result = args val } | bv_decls tCOMMA bvar { result = args val } bvar: tIDENTIFIER { result = s(:shadow, val[0].to_sym) } | f_bad_arg lambda: { self.env.extend :dynamic result = self.lexer.lineno result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest } f_larglist lambda_body { lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body self.env.unextend } f_larglist: tLPAREN2 f_args opt_bv_decl rparen { result = args val } | f_args { result = val[0] result = 0 if result == s(:args) } lambda_body: tLAMBEG compstmt tRCURLY { result = val[1] } | kDO_LAMBDA compstmt kEND { result = val[1] } do_block: kDO_BLOCK { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend } block_call: command do_block { # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] } | block_call dot_or_colon operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3] } | block_call dot_or_colon operation2 opt_paren_args brace_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } | block_call dot_or_colon operation2 command_args do_block { iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 } method_call: fcall { result = self.lexer.lineno } paren_args { args = self.call_args val[2..-1] result = val[0].concat args.sexp_body } | primary_value call_op operation2 opt_paren_args { result = new_call val[0], val[2].to_sym, val[3], val[1] } | primary_value tCOLON2 operation2 paren_args { result = new_call val[0], val[2].to_sym, val[3] } | primary_value tCOLON2 operation3 { result = new_call val[0], val[2].to_sym } | primary_value call_op paren_args { result = new_call val[0], :call, val[2], val[1] } | primary_value tCOLON2 paren_args { result = new_call val[0], :call, val[2] } | kSUPER paren_args { result = new_super val[1] } | kSUPER { result = s(:zsuper) } | primary_value tLBRACK2 opt_call_args rbracket { result = new_aref val } brace_block: tLCURLY { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt tRCURLY { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } | kDO { self.env.extend :dynamic result = self.lexer.lineno } opt_block_param { result = nil # self.env.dynamic.keys } compstmt kEND { _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend } case_body: kWHEN { result = self.lexer.lineno } args then compstmt cases { result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] } cases: opt_else | case_body opt_rescue: kRESCUE exc_list exc_var then compstmt opt_rescue { (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above } | { result = nil } exc_list: arg_value { result = s(:array, val[0]) } | mrhs | none exc_var: tASSOC lhs { result = val[1] } | none opt_ensure: kENSURE compstmt { _, body = val result = body || s(:nil) } | none literal: numeric { result = s(:lit, val[0]) } | symbol { result = s(:lit, val[0]) } | dsym strings: string { val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] } string: tCHAR { debug20 23, val, result } | string1 | string string1 { result = self.literal_concat val[0], val[1] } string1: tSTRING_BEG string_contents tSTRING_END { result = val[1] } | tSTRING { result = new_string val } xstring: tXSTRING_BEG xstring_contents tSTRING_END { result = new_xstring val[1] } regexp: tREGEXP_BEG regexp_contents tREGEXP_END { result = new_regexp val } words: tWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tWORDS_BEG word_list tSTRING_END { result = val[1] } word_list: none { result = new_word_list } | word_list word tSPACE { result = val[0].dup << new_word_list_entry(val) } word: string_content | word string_content { result = self.literal_concat val[0], val[1] } symbols: tSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tSYMBOLS_BEG symbol_list tSTRING_END { result = val[1] } symbol_list: none { result = new_symbol_list } | symbol_list word tSPACE { result = val[0].dup << new_symbol_list_entry(val) } qwords: tQWORDS_BEG tSPACE tSTRING_END { result = s(:array) } | tQWORDS_BEG qword_list tSTRING_END { result = val[1] } qsymbols: tQSYMBOLS_BEG tSPACE tSTRING_END { result = s(:array) } | tQSYMBOLS_BEG qsym_list tSTRING_END { result = val[1] } qword_list: none { result = new_qword_list } | qword_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qword_list_entry(val) } qsym_list: none { result = new_qsym_list } | qsym_list tSTRING_CONTENT tSPACE { result = val[0].dup << new_qsym_list_entry(val) } string_contents: none { result = s(:str, "") } | string_contents string_content { result = literal_concat(val[0], val[1]) } xstring_contents: none { result = nil } | xstring_contents string_content { result = literal_concat(val[0], val[1]) } regexp_contents: none { result = nil } | regexp_contents string_content { result = literal_concat(val[0], val[1]) } string_content: tSTRING_CONTENT { result = new_string val } | tSTRING_DVAR { result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg # TODO: expr_value ? } string_dvar { lexer.lex_strterm = val[1] result = s(:evstr, val[2]) } | tSTRING_DBEG { result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store, lexer.lex_state, ] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_value } compstmt tRCURLY { #if V == 20 # TODO: tRCURLY -> tSTRING_DEND #else # TODO: tRCURLY -> tSTRING_END #endif _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg lexer.lex_state = oldlex_state case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else debug20 25 raise "unknown string body: #{stmt.inspect}" end } string_dvar: tGVAR { result = s(:gvar, val[0].to_sym) } | tIVAR { result = s(:ivar, val[0].to_sym) } | tCVAR { result = s(:cvar, val[0].to_sym) } | backref symbol: tSYMBEG sym { lexer.lex_state = :expr_end result = val[1].to_sym } | tSYMBOL { result = val[0].to_sym } sym: fname | tIVAR | tGVAR | tCVAR dsym: tSYMBEG xstring_contents tSTRING_END { lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) when :evstr then result = s(:dsym, "", result) else debug20 26, val, result end } #if V == 20 numeric: tINTEGER | tFLOAT | tUMINUS_NUM tINTEGER =tLOWEST #else numeric: simple_numeric | tUMINUS_NUM simple_numeric #endif { result = -val[1] # TODO: pt_testcase #if V == 20 } | tUMINUS_NUM tFLOAT =tLOWEST { result = -val[1] # TODO: pt_testcase #endif } #if V >= 21 simple_numeric: tINTEGER | tFLOAT | tRATIONAL | tIMAGINARY #endif user_variable: tIDENTIFIER | tIVAR | tGVAR | tCONSTANT | tCVAR keyword_variable: kNIL { result = s(:nil) } | kSELF { result = s(:self) } | kTRUE { result = s(:true) } | kFALSE { result = s(:false) } | k__FILE__ { result = s(:str, self.file) } | k__LINE__ { result = s(:lit, lexer.lineno) } | k__ENCODING__ { result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end } var_ref: user_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } | keyword_variable { var = val[0] result = Sexp === var ? var : self.gettable(var) } var_lhs: user_variable { result = self.assignable val[0] } | keyword_variable { result = self.assignable val[0] debug20 29, val, result } backref: tNTH_REF { result = s(:nth_ref, val[0]) } | tBACK_REF { result = s(:back_ref, val[0]) } superclass: term { result = nil } | tLT { lexer.lex_state = :expr_beg } expr_value term { result = val[2] } | error term { yyerrok result = nil debug20 30, val, result } f_arglist: tLPAREN2 f_args rparen { result = val[1] self.lexer.lex_state = :expr_beg self.lexer.command_start = true # TODO: # $$ = parser->parser_in_kwarg; # parser->parser_in_kwarg = 1; } | f_args term { # TODO: parser->parser_in_kwarg = $1; result = val[0] self.lexer.lex_state = :expr_beg self.lexer.command_start = true } args_tail: f_kwarg tCOMMA f_kwrest opt_f_block_arg { result = args val } | f_kwarg opt_f_block_arg { result = args val } | f_kwrest opt_f_block_arg { result = args val } | f_block_arg opt_args_tail: tCOMMA args_tail { result = val[1] } | { result = nil } f_args: f_arg tCOMMA f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg opt_args_tail { result = args val } | f_arg tCOMMA f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_arg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg opt_args_tail { result = args val } | f_optarg tCOMMA f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | f_optarg opt_args_tail { result = args val } | f_optarg tCOMMA f_arg opt_args_tail { result = args val } | f_rest_arg opt_args_tail { result = args val } | f_rest_arg tCOMMA f_arg opt_args_tail { result = args val } | args_tail { result = args val } | { result = args val } f_bad_arg: tCONSTANT { yyerror "formal argument cannot be a constant" } | tIVAR { yyerror "formal argument cannot be an instance variable" } | tGVAR { yyerror "formal argument cannot be a global variable" } | tCVAR { yyerror "formal argument cannot be a class variable" } f_norm_arg: f_bad_arg | tIDENTIFIER { identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier } #if V >= 22 f_arg_asgn: f_norm_arg f_arg_item: f_arg_asgn | tLPAREN f_margs rparen { result = val[1] } #else f_arg_item: f_norm_arg | tLPAREN f_margs rparen { result = val[1] } #endif f_arg: f_arg_item { case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end } | f_arg tCOMMA f_arg_item { list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item } #if V == 20 f_kw: tLABEL arg_value #else f_label: tLABEL f_kw: f_label arg_value #endif { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } #if V >= 21 | f_label { label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) } #endif #if V == 20 f_block_kw: tLABEL primary_value #else f_block_kw: f_label primary_value #endif { # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) } #if V >= 21 | f_label { label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) } #endif f_block_kwarg: f_block_kw | f_block_kwarg tCOMMA f_block_kw { list, _, item = val result = list << item.last } f_kwarg: f_kw | f_kwarg tCOMMA f_kw { result = args val } kwrest_mark: tPOW | tDSTAR f_kwrest: kwrest_mark tIDENTIFIER { result = :"**#{val[1]}" } | kwrest_mark { result = :"**" } #if V == 20 f_opt: tIDENTIFIER tEQL arg_value #elif V == 21 f_opt: f_norm_arg tEQL arg_value #else f_opt: f_arg_asgn tEQL arg_value #endif { result = self.assignable val[0], val[2] # TODO: detect duplicate names } #if V == 20 f_block_opt: tIDENTIFIER tEQL primary_value #elif V == 21 f_block_opt: f_norm_arg tEQL primary_value #else f_block_opt: f_arg_asgn tEQL primary_value #endif { result = self.assignable val[0], val[2] } f_block_optarg: f_block_opt { result = s(:block, val[0]) } | f_block_optarg tCOMMA f_block_opt { result = val[0] result << val[2] } f_optarg: f_opt { result = s(:block, val[0]) } | f_optarg tCOMMA f_opt { result = self.block_append val[0], val[2] } restarg_mark: tSTAR2 | tSTAR f_rest_arg: restarg_mark tIDENTIFIER { # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" } | restarg_mark { name = :"*" self.env[name] = :lvar result = name } blkarg_mark: tAMPER2 | tAMPER f_block_arg: blkarg_mark tIDENTIFIER { identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym } opt_f_block_arg: tCOMMA f_block_arg { result = val[1] } | { result = nil } singleton: var_ref | tLPAREN2 { lexer.lex_state = :expr_beg } expr rparen { result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit } assoc_list: none # [!nil] { result = s(:array) } | assocs trailer # [!nil] { result = val[0] } assocs: assoc | assocs tCOMMA assoc { list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash } assoc: arg_value tASSOC arg_value { result = s(:array, val[0], val[2]) } | tLABEL opt_nl arg_value { result = s(:array, s(:lit, val[0][0].to_sym), val.last) } #if V >= 22 | tSTRING_BEG string_contents tLABEL_END arg_value { _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value) } | tSYMBOL arg_value { raise "not yet: #{val.inspect}" # result = s(:array, s(:lit, val[1].to_sym), val[1]) } #endif | tDSTAR arg_value { result = s(:array, s(:kwsplat, val[1])) } operation: tIDENTIFIER | tCONSTANT | tFID operation2: tIDENTIFIER | tCONSTANT | tFID | op operation3: tIDENTIFIER | tFID | op dot_or_colon: tDOT | tCOLON2 call_op: tDOT #if V >= 23 | tLONELY #endif opt_terms: | terms opt_nl: | tNL rparen: opt_nl tRPAREN rbracket: opt_nl tRBRACK trailer: | tNL | tCOMMA term: tSEMI { yyerrok } | tNL terms: term | terms tSEMI { yyerrok } none: { result = nil; } end ---- inner require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ruby_parser-3.11.0/lib/ruby_lexer.rex0000444000004100000410000001731713277753330017650 0ustar www-datawww-data# encoding: UTF-8 # # lexical scanner definition for ruby class RubyLexer macro IDENT /^#{IDENT_CHAR}+/o ESC /\\((?>[0-7]{1,3}|x[0-9a-fA-F]{1,2}|M-[^\\]|(C-|c)[^\\]|u[0-9a-fA-F]+|u\{[0-9a-fA-F]+\}|[^0-7xMCc]))/ SIMPLE_STRING /(#{ESC}|\#(#{ESC}|[^\{\#\@\$\"\\])|[^\"\\\#])*/o SSTRING /(\\.|[^\'])*/ INT_DEC /[+]?(?:(?:[1-9][\d_]*|0)(?!\.\d)(ri|r|i)?\b|0d[0-9_]+)(ri|r|i)?/i INT_HEX /[+]?0x[a-f0-9_]+(ri|r|i)?/i INT_BIN /[+]?0b[01_]+(ri|r|i)?/i INT_OCT /[+]?0o?[0-7_]+(ri|r|i)?|0o(ri|r|i)?/i FLOAT /[+]?\d[\d_]*\.[\d_]+(e[+-]?[\d_]+)?(?:(ri|r|i)\b)?|[+]?[\d_]+e[+-]?[\d_]+(?:(ri|r|i)\b)?/i INT_DEC2 /[+]?\d[0-9_]*(?![e])((ri|r|i)\b)?/i NUM_BAD /[+]?0[xbd]\b/i INT_OCT_BAD /[+]?0o?[0-7_]*[89]/i FLOAT_BAD /[+]?\d[\d_]*_(e|\.)/i start return process_string if lex_strterm self.command_state = self.command_start self.command_start = false self.space_seen = false self.last_state = lex_state rule # [:state] pattern [actions] # \s - \n + \v /[\ \t\r\f\v]/ { self.space_seen = true; next } /\n|\#/ process_newline_or_comment /[\]\)\}]/ process_bracing : /\!/ | in_arg_state? /\!\@/ { result :expr_arg, :tUBANG, "!@" } | /\![=~]?/ { result :arg_state, TOKENS[text], text } : /\./ | /\.\.\.?/ { result :expr_beg, TOKENS[text], text } | /\.\d/ { rb_compile_error "no . floating literal anymore put 0 before dot" } | /\./ { result :expr_dot, :tDOT, "." } /\(/ process_paren /\,/ { result :expr_beg, TOKENS[text], text } : /=/ | /\=\=\=|\=\=|\=~|\=>|\=(?!begin\b)/ { result arg_state, TOKENS[text], text } | bol? /\=begin(?=\s)/ process_begin | /\=(?=begin\b)/ { result arg_state, TOKENS[text], text } ruby22_label? /\"#{SIMPLE_STRING}\":/o process_label /\"(#{SIMPLE_STRING})\"/o { result :expr_end, :tSTRING, text[1..-2].gsub(ESC) { unescape $1 } } /\"/ { string STR_DQUOTE; result nil, :tSTRING_BEG, text } /\@\@?\d/ { rb_compile_error "`#{text}` is not allowed as a variable name" } /\@\@?#{IDENT_CHAR}+/o process_ivar : /:/ | not_end? /:([a-zA-Z_]#{IDENT_CHAR}*(?:[?]|[!](?!=)|=(?==>)|=(?![=>]))?)/o process_symbol | not_end? /\:\"(#{SIMPLE_STRING})\"/o process_symbol | not_end? /\:\'(#{SSTRING})\'/o process_symbol | /\:\:/ process_colon2 | /\:/ process_colon1 /->/ { result :expr_endfn, :tLAMBDA, nil } /[+-]/ process_plus_minus : /[+\d]/ | /#{NUM_BAD}/o { rb_compile_error "Invalid numeric format" } | /#{INT_DEC}/o { int_with_base 10 } | /#{INT_HEX}/o { int_with_base 16 } | /#{INT_BIN}/o { int_with_base 2 } | /#{INT_OCT_BAD}/o { rb_compile_error "Illegal octal digit." } | /#{INT_OCT}/o { int_with_base 8 } | /#{FLOAT_BAD}/o { rb_compile_error "Trailing '_' in number." } | /#{FLOAT}/o process_float | /#{INT_DEC2}/o { int_with_base 10 } | /[0-9]/ { rb_compile_error "Bad number format" } /\[/ process_square_bracket was_label? /\'#{SSTRING}\':?/o process_label_or_string : /\|/ | /\|\|\=/ { result :expr_beg, :tOP_ASGN, "||" } | /\|\|/ { result :expr_beg, :tOROP, "||" } | /\|\=/ { result :expr_beg, :tOP_ASGN, "|" } | /\|/ { result :arg_state, :tPIPE, "|" } /\{/ process_curly_brace : /\*/ | /\*\*=/ { result :expr_beg, :tOP_ASGN, "**" } | /\*\*/ { result(:arg_state, space_vs_beginning(:tDSTAR, :tDSTAR, :tPOW), "**") } | /\*\=/ { result(:expr_beg, :tOP_ASGN, "*") } | /\*/ { result(:arg_state, space_vs_beginning(:tSTAR, :tSTAR, :tSTAR2), "*") } : // { result :arg_state, :tCMP, "<=>" } | /\<\=/ { result :arg_state, :tLEQ, "<=" } | /\<\<\=/ { result :arg_state, :tOP_ASGN, "<<" } | /\<\/ | /\>\=/ { result :arg_state, :tGEQ, ">=" } | /\>\>=/ { result :arg_state, :tOP_ASGN, ">>" } | /\>\>/ { result :arg_state, :tRSHFT, ">>" } | /\>/ { result :arg_state, :tGT, ">" } : /\`/ | expr_fname? /\`/ { result(:expr_end, :tBACK_REF2, "`") } | expr_dot? /\`/ { result((command_state ? :expr_cmdarg : :expr_arg), :tBACK_REF2, "`") } | /\`/ { string STR_XQUOTE, '`'; result(nil, :tXSTRING_BEG, "`") } /\?/ process_questionmark : /&/ | /\&\&\=/ { result(:expr_beg, :tOP_ASGN, "&&") } | /\&\&/ { result(:expr_beg, :tANDOP, "&&") } | /\&\=/ { result(:expr_beg, :tOP_ASGN, "&" ) } | /\&\./ { result(:expr_dot, :tLONELY, "&.") } | /\&/ process_amper /\// process_slash : /\^/ | /\^=/ { result(:expr_beg, :tOP_ASGN, "^") } | /\^/ { result(:arg_state, :tCARET, "^") } /\;/ { self.command_start = true; result(:expr_beg, :tSEMI, ";") } : /~/ | in_arg_state? /\~@/ { result(:arg_state, :tTILDE, "~") } | /\~/ { result(:arg_state, :tTILDE, "~") } : /\\/ | /\\\r?\n/ { self.lineno += 1; self.space_seen = true; next } | /\\/ { rb_compile_error "bare backslash only allowed before newline" } /\%/ process_percent : /\$/ | /\$_\w+/ process_gvar | /\$_/ process_gvar | /\$[~*$?!@\/\\;,.=:<>\"]|\$-\w?/ process_gvar | in_fname? /\$([\&\`\'\+])/ process_gvar | /\$([\&\`\'\+])/ process_backref | in_fname? /\$([1-9]\d*)/ process_gvar | /\$([1-9]\d*)/ process_nthref | /\$0/ process_gvar | /\$\W|\$\z/ process_gvar_oddity | /\$\w+/ process_gvar /\_/ process_underscore /#{IDENT}/o process_token /\004|\032|\000|\Z/ { [RubyLexer::EOF, RubyLexer::EOF] } /./ { rb_compile_error "Invalid char #{text.inspect} in expression" } end ruby_parser-3.11.0/lib/ruby22_parser.rb0000644000004100000410000077254013277753330020006 0ustar www-datawww-data# # DO NOT MODIFY!!!! # This file is automatically generated by Racc 1.4.14 # from Racc grammer file "". # require 'racc/parser.rb' class Ruby22Parser < RubyParser::Parser require "ruby_lexer" require "ruby_parser_extras" # :stopdoc: # Local Variables: ** # racc-token-length-max:14 ** # End: ** ##### State transition tables begin ### clist = [ '-607,-100,273,-102,584,-103,271,-607,-607,-607,756,271,665,-607,-607', '271,-607,-615,825,-516,590,221,-509,-103,242,-607,-516,271,584,-509', '584,-105,-101,636,584,-516,-607,-607,584,-607,-607,-607,-607,-607,529', '-101,664,218,219,-106,652,83,222,708,-94,736,239,222,-98,84,241,240', '237,238,-102,-100,-99,-607,-607,-607,-607,-607,-607,-607,-607,-607,-607', '-607,-607,-607,-607,-603,736,-607,-607,-607,736,649,218,219,-504,-607', '-418,270,-607,218,219,-504,270,-607,-105,-607,270,-607,-607,-607,-607', '-607,-607,-607,-104,-607,-607,-607,270,-100,755,-102,116,-103,-100,-94', '-102,115,-103,-289,-607,-607,-94,-93,-603,-607,-289,-289,-289,116,-96', '222,-289,-289,115,-289,116,-102,116,939,-101,115,116,115,-92,-101,116', '115,-97,116,-94,115,707,-94,115,-289,-289,-89,-289,-289,-289,-289,-289', '-93,-91,-90,629,-94,626,-84,-604,-92,222,610,747,264,116,-518,748,222', '116,115,265,-70,-262,115,-289,-289,-289,-289,-289,-289,-289,-289,-289', '-289,-289,-289,-289,-289,855,825,-289,-289,-289,610,648,-518,-519,-95', '-289,634,529,-289,94,95,94,95,-289,-89,-289,627,-289,-289,-289,-289', '-289,-289,-289,628,-289,625,-289,-98,612,611,608,242,-92,-600,610,242', '887,242,-607,-289,-289,790,-95,776,-289,-607,-607,-607,-96,680,-607', '-607,-607,242,-607,222,-104,-98,-99,222,612,611,-105,-607,-607,-607', '-607,-92,116,768,-92,-601,624,115,-607,-607,621,-607,-607,-607,-607', '-607,617,569,-92,-91,-504,96,97,96,97,610,-100,-504,572,612,611,-101', '-600,-100,222,791,-504,-607,766,-607,-607,-607,-607,-607,-607,-607,-607', '-607,-607,-607,-607,-607,-607,456,-600,-607,-607,-607,-507,792,-607', '580,579,-607,-84,-507,-607,-607,-427,-607,-601,-607,610,-607,-507,-607', '-607,-607,-607,-607,-607,-607,569,-607,-607,-607,612,611,630,665,-607', '-103,-601,572,684,573,610,-607,-607,-607,-607,-607,-603,-607,-289,-607', '-607,222,665,-106,1009,-289,-289,-289,642,-102,-289,-289,-289,665,-289', '-427,215,664,-607,222,580,579,-427,966,-289,-289,-289,612,611,618,541', '-427,752,543,-289,-289,664,-289,-289,-289,-289,-289,564,534,561,560', '559,664,562,-427,-92,612,611,613,573,564,610,561,560,559,695,562,700', '-607,-101,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289,-289', '-289,-289,-519,216,-289,-289,-289,215,793,-289,-507,701,-289,610,214', '-289,-289,-507,-289,704,-289,504,-289,212,-289,-289,-289,-289,-289,-289', '-289,-515,-289,541,-289,710,540,713,-515,-607,612,611,608,985,-90,-97', '-607,-289,-289,-289,-289,-603,-289,-507,-289,-607,851,643,-99,-106,-507', '-507,-507,-510,-104,-507,-507,-507,714,-507,-510,264,716,-607,612,611', '623,-507,265,-507,-507,-507,242,116,610,218,219,615,115,-507,-507,-513', '-507,-507,-507,-507,-507,541,-513,-94,543,718,-514,720,564,-511,561', '560,559,-514,562,408,-511,-103,239,728,410,409,241,240,-507,-507,-507', '-507,-507,-507,-507,-507,-507,-507,-507,-507,-507,-507,116,729,-507', '-507,-507,115,-507,-507,722,730,-507,612,611,-507,-507,732,-507,725', '-507,595,-507,590,-507,-507,-507,-507,-507,-507,-507,739,-507,594,-507', '564,-512,561,560,559,569,562,541,-512,926,543,400,-507,-507,-507,-507', '572,-507,-504,-507,590,-289,218,219,769,-504,-504,-504,-289,-507,-504', '-504,-504,-604,-504,116,-290,-289,567,550,115,770,-504,-290,-504,-504', '-504,577,576,580,579,116,-290,771,-504,-504,115,-504,-504,-504,-504', '-504,564,-263,561,560,559,544,562,564,777,561,560,559,538,562,564,242', '561,560,559,489,562,573,530,-504,-504,-504,-504,-504,-504,-504,-504', '-504,-504,-504,-504,-504,-504,489,722,-504,-504,-504,-280,-504,-504', '722,526,-504,273,-280,-504,-504,722,-504,725,-504,222,-504,-280,-504', '-504,-504,-504,-504,-504,-504,242,-504,564,-504,561,560,559,963,562', '561,560,559,795,562,261,-337,-504,-504,-504,-504,987,-504,-337,-504', '502,296,72,73,74,12,60,-337,239,-504,66,67,241,240,504,70,722,68,69', '71,33,34,75,76,3,931,855,825,222,32,31,30,104,103,105,106,878,879,22', '276,880,110,111,653,11,48,695,13,108,107,109,98,59,100,99,101,222,102', '110,111,523,94,95,273,45,46,44,242,246,251,252,253,248,250,258,259,254', '255,-289,235,236,-290,116,256,257,-289,43,115,-290,36,-604,273,61,62', '-289,116,63,-290,38,239,115,245,47,241,240,237,238,249,247,243,23,244', '580,579,-289,91,83,85,86,87,89,-289,218,219,84,92,-604,260,695,-239', '-289,242,65,218,219,81,88,90,825,222,96,97,296,72,73,74,12,60,516,515', '-516,66,67,222,222,849,70,-516,68,69,71,33,34,75,76,222,-516,825,859', '-69,32,31,30,104,103,105,106,222,222,22,504,502,499,273,637,11,48,489', '13,108,107,109,98,59,100,99,101,221,102,110,111,-264,94,95,458,45,46', '44,242,246,251,252,253,248,250,258,259,254,255,-517,235,236,215,457', '256,257,-517,43,886,1016,36,455,889,61,62,-517,713,63,1014,38,239,892', '245,47,241,240,237,238,249,247,243,23,244,895,897,215,91,83,85,86,87', '89,593,215,899,84,92,222,260,901,966,591,902,65,411,695,81,88,90,752', '112,96,97,296,72,73,74,12,60,910,406,-280,66,67,-262,914,916,70,-280', '68,69,71,33,34,75,76,917,-280,222,713,920,32,31,30,104,103,105,106,922', '924,22,926,926,222,932,653,11,48,934,13,108,107,109,98,59,100,99,101', '390,102,110,111,936,94,95,387,45,46,44,242,246,251,252,253,248,250,258', '259,254,255,215,235,236,215,384,256,257,532,43,381,522,36,357,1005,61', '62,454,222,63,520,38,239,946,245,47,241,240,237,238,249,247,243,23,244', '947,222,215,91,83,85,86,87,89,750,-517,950,84,92,-265,260,222,-517,752', '960,65,321,967,81,88,90,-517,968,96,97,296,72,73,74,12,60,970,971,-290', '66,67,320,987,261,70,-290,68,69,71,33,34,75,76,989,-290,990,994,713', '32,31,30,104,103,105,106,999,963,22,561,560,559,1001,562,11,48,1003', '13,108,107,109,98,59,100,99,101,1005,102,110,111,1005,94,95,1012,45', '46,44,242,246,251,252,253,248,250,258,259,254,255,215,235,236,1017,1018', '256,257,453,43,926,926,36,926,1023,61,62,454,987,63,217,38,239,211,245', '47,241,240,237,238,249,247,243,23,244,-604,-603,700,91,83,85,86,87,89', '210,987,1046,84,92,1047,260,1048,1049,1005,1005,65,1005,222,81,88,90', '209,641,96,97,296,72,73,74,12,60,640,222,,66,67,,,,70,,68,69,71,33,34', '75,76,119,120,121,122,123,32,31,30,104,103,105,106,,,22,119,120,121', '122,123,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,', '45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256', '257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243', '23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97', '296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,119,120,121', '122,123,32,31,30,104,103,105,106,,,22,119,120,121,122,123,11,48,,13', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251', '252,253,248,250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61,62', ',,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85', '86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60', ',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', ',22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256', '257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243', '23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97', '8,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254', '255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240', '237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65', ',,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248', '250,258,259,254,255,,235,236,,,256,257,,43,,,298,,,61,62,,,63,,38,239', ',245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84', '92,,260,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70', ',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48', ',13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246', '251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61', '62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83', '85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256', '257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243', '23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97', '296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254,255', ',235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237', '238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,222,260,,,,,65', ',,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248', '250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239', ',245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84', '92,,260,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70', ',68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48', ',13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246', '251,252,253,248,250,258,259,254,255,,235,236,,,256,257,,43,,,36,,,61', '62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83', '85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,242,246,251,252,253,248,250,258,259,254,255,,235,236,,,256', '257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243', '23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81,88,90,,,96,97', '296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,242,246,251,252,253,248,250,258,259,254,255', ',235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237', '238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,260,,,,,65,,,81', '88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250', '258,259,254,255,,235,236,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245', '47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92', ',260,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,242,11,48,', '13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,246', '251,252,253,248,250,258,239,254,255,,241,240,237,238,256,257,,43,,,36', ',,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91', '83,85,86,87,89,,,,84,92,,564,,561,560,559,65,562,,81,88,90,,,96,97,296', '72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,722,,,,,32,31,30', '104,103,105,106,,564,22,561,560,559,,562,11,48,,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,242,,,,,,,564,722,561,560,559', ',562,,,256,257,,43,,,36,,242,61,62,,,63,,38,239,,245,47,241,240,237', '238,256,257,243,23,244,722,,,91,83,85,86,87,89,,,239,84,92,,241,240', '237,238,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,-627', '-627,-627,-627,248,250,,,-627,-627,,,,,,256,257,,43,,,36,,,61,62,,,63', ',38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87', '89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,', '11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', '242,,,,,,,,,,,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241', '240,237,238,,,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,242,246,251,252,253,248,250', '258,259,254,255,,-627,-627,,,256,257,,43,,,36,,,61,62,,,63,,38,239,', '245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68', '69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,,,,,', ',,,,,,,,,,256,257,,43,,,298,,,61,62,,,63,,38,239,,245,47,241,240,237', '238,,,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,', ',96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,', '32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99', '101,,102,110,111,,94,95,,45,46,44,242,-627,-627,-627,-627,248,250,,', '-627,-627,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240', '237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,242,-627,-627,-627,-627', '248,250,,,-627,-627,,,,,,256,257,,43,,,36,,,61,62,,,63,,38,239,,245', '47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,,70,,68,69', '71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242,-627,-627', '-627,-627,248,250,,,-627,-627,,,,,,256,257,,43,,,298,,,61,62,,,63,,38', '239,,245,47,241,240,237,238,249,247,243,23,244,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11', '48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,242', '246,251,252,253,248,250,258,259,254,255,,-627,-627,,,256,257,,43,,,36', ',,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23,244,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,296,72,73,74,12', '60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,242,-627,-627,-627,-627,248,250,,,-627,-627,,,,,,256,257,', '43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243,23', '244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,296,72', '73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103', '105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,242,-627,-627,-627,-627,248,250,,,-627,-627,,,,,,256', '257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243', '23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,8,72', '73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103', '105,106,,,22,,,,,,11,48,10,13,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,242,246,251,252,253,248,250,,,254,255,,,,,,256', '257,,43,,,36,,,61,62,,,63,,38,239,,245,47,241,240,237,238,249,247,243', '23,244,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72', '73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104', '103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,242,,,,,,,,,,,,,,,,256,257,,227,,,233,,,61,62,,,63', ',,239,,245,47,241,240,237,238,,,243,232,244,,,,91,83,85,86,87,89,,,', '84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', '107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46,44,242,,,,,,', ',,,,,,,,,256,257,,227,,,233,,,61,62,,,63,,,239,283,245,47,241,240,237', '238,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,', ',96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,242,,,,,,,,,,,,,,,,256,257,,227,,,233,,,61', '62,,,63,,,239,,245,47,241,240,237,238,,,,23,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', ',,,,311,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,,317,,', ',,,,,,,,,,,,,,,,,307,,,303,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,534,,61,62,,,63,,,,,,47,,,,,,,,232,,,,', '91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', ',22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,', ',,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60', ',,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,', ',234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94', '95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,283,,47,,', ',,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', '316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289', '102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,', '63,,677,,283,,47,,,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65', ',290,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314', '75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', ',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', '314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107', '109,98,59,100,99,101,289,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,', ',,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,286,85,86,87,89', ',,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70', ',68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,', ',48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,', ',,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,774,,,,47,,,,,,,,232,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22', ',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,', ',,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46', '44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232', ',,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', '105,106,,,234,,,,,,,311,,,108,107,109,596,59,100,99,597,,102,110,111', ',94,95,,,,317,,,,,,,,,,,,,,,,,,,,598,,,233,,,61,62,,,63,,,,,,,,,,,,', ',,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', '105,106,,,234,,,,,,,311,,,108,107,109,596,59,100,99,597,,102,110,111', ',94,95,,,,317,,,,,,,,,,,,,,,,,,,,598,,,233,,,61,62,,,63,,,,,,,,,,,,', ',,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,', ',,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', '316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', ',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309', '310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', ',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,', ',,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', '99,101,289,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233', ',,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,', ',,,65,,290,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', ',,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', '314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,227,,,233,,,61,62,,,63,,677,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,311', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,,317,,,,,,,,,,', ',,,,,,,,,977,,,233,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46,44,,,,', ',,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,677,,,,47,,,,,,,,232,,,,,91,286', '85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73,74,,60,,', ',66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234', ',,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46', '44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232', ',,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94', '95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47', ',,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,', ',96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31', '30,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289', '102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,', '63,,285,,283,,47,,,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65', ',290,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75', '76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', '61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', '76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,311,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,307,,,303', ',,61,62,,,63,,302,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', '76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,311,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,307,,,233', ',,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,319,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', '76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', ',233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', '314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,311,,', '108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,,317,,,,,,,,,,,,', ',,,,,,,904,,,233,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106', ',,234,,,,,,,311,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,', ',,317,,,,,,,,,,,,,,,,,,,,307,,,303,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,,,47,,,,,', ',,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,116,,,,,115,65,,,81,88,90,,', '96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', '316,104,103,105,106,,,234,,,,,,,311,,,108,107,109,98,59,100,99,101,', '102,110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,351,,,36,,,61,62,,,63,', '38,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,', '96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30', '104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', '285,,283,,47,,,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290', '81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,', ',,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99', '101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61', '62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,', '81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109,98,59', '100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36', ',,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,', ',,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,10,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', ',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,400,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227', ',,233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', ',233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', ',233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', ',233,,,61,62,,,63,,,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,', ',,,,,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33', '34,75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', ',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', '314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,311,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,307', ',,303,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,', ',,65,,,81,88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34', '75,76,,,,,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109', '98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43', ',,36,,,61,62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,400,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,416,,,,47,,,,,,,,232,,,,,91,83,85', '86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,', ',,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,', ',,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83', '85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66', '67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,', ',,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46', '44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232', ',,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', '105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,283,,47', ',,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,', ',96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309', '310,316,104,103,105,106,,,234,,,,,,,311,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,904,,,233,,,61,62,,,63', ',,,,,,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,416,,,,47', ',,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111', ',94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,', ',,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,222,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', '316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', ',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309', '310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', ',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,', ',,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', '61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', '76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', ',233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', '314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', ',,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46', '44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,677,,283,,47,,,,,,,,232', ',,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', '105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', ',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', '104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', '47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', '316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', ',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309', '310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', ',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,', ',,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', '61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', '76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', ',233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', '314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', '105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', ',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', '104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', '47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', '316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', ',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309', '310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', ',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,', ',,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', '61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', '76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', ',233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92', ',,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313', '314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107', '109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,', ',,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,', ',84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69', '71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', ',,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106', ',,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45', '46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,', ',,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,', '60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105', '106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', '105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', ',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', '104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', '47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104', '103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285', ',283,,47,,,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81', '88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,', ',,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,', '61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76', ',,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100', '99,101,289,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233', ',,61,62,,,63,,285,,283,,47,,,,,,,,232,,,,,91,286,85,86,87,89,,,,84,287', ',,,,,,65,,290,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,,,,48,,,108,107,109', '98,59,100,99,101,289,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,', ',227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232,,,,,91,286,85,86,87', '89,,,,84,287,222,,,,,,65,,290,81,88,90,,,96,97,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234', ',,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91', '83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,', '66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234', ',,,,,,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46', '44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232', ',,,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105', '106,,,22,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95', ',45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,23', ',,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74', ',60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', '105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,', ',,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', '104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', '47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96', '97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310', '316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,', ',,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90', ',,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309', '310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101', ',102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,', ',63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81', '88,90,,,96,97,72,73,74,12,60,,,,66,67,,,,70,,68,69,71,33,34,75,76,,', ',,,32,31,30,104,103,105,106,,,22,,,,,,11,48,,13,108,107,109,98,59,100', '99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,43,,,36,,,61', '62,,,63,,38,,,,47,,,,,,,,23,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65', ',,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75', '76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108,107,109,98', '59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,', ',233,,,61,62,,,63,,285,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84', '92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68,69,71', '313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48,,,108', '107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,,,,,,,', ',,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86,87,89', ',,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,,70,,68', '69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,,,,,,48', ',,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,45,46,44,,,,,,,', ',,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,,47,,,,,,,,232,,,,,91,83,85,86', '87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67,,,', '70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103,105,106,,,234,,', ',,,,311,,,108,107,109,98,59,100,99,101,,102,110,111,,94,95,,,,317,,', ',,,,,,,,,,,,,,,,,307,,,233,,,61,62,,,63,,,,,,,,,,,,,,,,,,,91,83,85,86', '87,89,,,,84,92,,,,518,,,65,,,81,88,90,,,96,97,72,73,74,,60,,,,66,67', ',,,70,,68,69,71,33,34,75,76,,,,,,32,31,30,104,103,105,106,,,234,,,,', ',,48,,,108,107,109,98,59,100,99,101,289,102,110,111,,94,95,,45,46,44', ',,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,285,,283,,47,,,,,,,,232,', ',,,91,286,85,86,87,89,,,,84,287,,,,,,,65,,290,81,88,90,,,96,97,72,73', '74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316,104,103', '105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110,111,', '94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,416,,,,47', ',,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', '104,103,105,106,,,234,,,,,,,311,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,307,,,303,,,61,62,,,63,,,,', ',,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', '104,103,105,106,,,234,,,,,,,311,,,108,107,109,98,59,100,99,101,,102', '110,111,,94,95,,,,317,,,,,,,,,,,,,,,,,,,,307,,,303,,,61,62,,,63,,,,', ',,,,,,,,,,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,,,96,97', '72,73,74,,60,,,,66,67,,,,70,,68,69,71,313,314,75,76,,,,,,309,310,316', '104,103,105,106,,,234,,,,,,,48,,,108,107,109,98,59,100,99,101,,102,110', '111,,94,95,,45,46,44,,,,,,,,,,,,,,,,,,,,227,,,233,,,61,62,,,63,,,,,', '47,,,,,,,,232,,,,,91,83,85,86,87,89,,,,84,92,,,,,,,65,,,81,88,90,-281', ',96,97,,,,-281,-281,-281,,,-281,-281,-281,564,-281,561,560,559,569,562', ',,,,-281,-281,-281,,,572,,,,,-281,-281,,-281,-281,-281,-281,-281,,,', ',,,,,,567,760,,,,,,,,577,576,580,579,,-281,-281,-281,-281,-281,-281', '-281,-281,-281,-281,-281,-281,-281,-281,,,-281,-281,-281,,,-281,,,-281', ',,-281,-281,,-281,573,-281,,-281,,-281,-281,-281,-281,-281,-281,-281', ',-281,,-281,,,,,,,,,,,,,-281,-281,-281,-281,-608,-281,,-281,,,,-608', '-608,-608,,,-608,-608,-608,564,-608,561,560,559,569,562,,,,-608,-608', '-608,-608,,,572,,,,,-608,-608,,-608,-608,-608,-608,-608,,,,,,,,,,567', ',,,,,,,,,,580,579,,-608,-608,-608,-608,-608,-608,-608,-608,-608,-608', '-608,-608,-608,-608,,,-608,-608,-608,,,-608,,,-608,,,-608,-608,,-608', '573,-608,,-608,,-608,-608,-608,-608,-608,-608,-608,,-608,-608,-608,', ',,,,,,,,,,,-608,-608,-608,-608,-609,-608,,-608,,,,-609,-609,-609,,,-609', '-609,-609,564,-609,561,560,559,569,562,,,,-609,-609,-609,-609,,,572', ',,,,-609,-609,,-609,-609,-609,-609,-609,,,,,,,,,,567,,,,,,,,,,,580,579', ',-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609,-609', ',,-609,-609,-609,,,-609,,,-609,,,-609,-609,,-609,573,-609,,-609,,-609', '-609,-609,-609,-609,-609,-609,,-609,-609,-609,,,,,,,,,,,,,-609,-609', '-609,-609,,-609,,-609,176,187,177,200,173,193,183,182,203,204,198,181', '180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', '199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,397,396', '128,,398,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163', '164,149,150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', '159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187,177,200,173,193,183,182', '203,204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195', '202,197,196,189,199,184,172,191,190,,,,,,171,178,169,170,166,167,168', '127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143', ',,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146', '144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158,176,187,177,200,173,193', '183,182,203,204,198,181,180,175,201,205,206,185,174,188,192,194,186', '179,,,,195,202,197,196,189,199,184,172,191,190,,,,,,171,178,169,170', '166,167,168,127,129,,,128,,,,,,,,,161,162,,157,139,140,141,148,145,147', ',,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156,155,151', '152,146,144,136,159,137,,,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177', '200,173,193,183,182,203,204,198,181,180,175,201,205,206,185,174,188', '192,194,186,179,,,,195,202,197,366,365,367,364,172,191,190,,,,,,171', '178,169,170,361,362,363,359,129,100,99,360,,102,,,,,,,161,162,,157,139', '140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,373,,,,,,,,154', '153,,138,160,156,155,151,152,146,144,136,159,137,,,165,,,,,,,,,,,,,', ',,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181,180,175,201', '205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189,199,184,172', '191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,,,,,,,,,161,162', ',157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,', ',,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,,165,91,,,', ',,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203,204,198,181', '180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202,197,196,189', '199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127,129,,,128,', ',,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', '150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', ',,165,91,,,,,,,,,,92,,,,,,,,,158,176,187,177,200,173,193,183,182,203', '204,198,181,180,175,201,205,206,185,174,188,192,194,186,179,,,,195,202', '197,196,189,199,184,172,191,190,,,,,,171,178,169,170,166,167,168,127', '129,126,,128,,,,,,,,,161,162,,157,139,140,141,148,145,147,,,142,143', ',,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156,155,151,152,146', '144,136,159,137,,,165,91,,,,-626,,,,,,92,-626,-626,-626,,,-626,-626', '-626,158,-626,,,,,,,,,-626,-626,-626,,,,,,,,,-626,-626,,-626,-626,-626', '-626,-626,,,,,,,,,,,,,,,,,,,,,,,,-626,-626,-626,-626,-626,-626,-626', '-626,-626,-626,-626,-626,-626,-626,,,-626,-626,-626,,,-626,,273,-626', ',,-626,-626,,-626,,-626,,-626,,-626,-626,-626,-626,-626,-626,-626,,-626', '-626,-626,,,,,,,,,,,,-626,-626,-626,,-626,,-626,-626,-626,-626,,,-626', '-626,-626,564,-626,561,560,559,569,562,,,,-626,-626,,,,,572,,,,,-626', '-626,,-626,-626,-626,-626,-626,,,564,,561,560,559,569,562,567,,,,,,', ',,572,,580,579,,-297,,,,,,,-297,-297,-297,,-626,-297,-297,-297,,-297', '567,-626,,,,,273,-626,,-297,-297,580,579,,573,,,,,-297,-297,,-297,-297', '-297,-297,-297,,-626,-626,,,,,,,,,,,,,-626,,,573,,-626,,,-297,-297,-297', '-297,-297,-297,-297,-297,-297,-297,-297,-297,-297,-297,,,-297,-297,-297', ',,-297,,276,-297,,,-297,-297,,-297,,-297,,-297,,-297,-297,-297,-297', '-297,-297,-297,,-297,,-297,,,,,,,,,,,,-426,-297,-297,,-297,,-297,-426', '-426,-426,,,-426,-426,-426,564,-426,561,560,559,569,562,,,,-426,-426', '-426,,,,572,,,,,-426,-426,,-426,-426,-426,-426,-426,,,,,,,,,,567,,,', ',,,,,577,576,580,579,,-426,-426,-426,-426,-426,-426,-426,-426,-426,-426', '-426,-426,-426,-426,,,-426,-426,-426,,,-426,,273,-426,,,-426,-426,,-426', '573,-426,,-426,,-426,-426,-426,-426,-426,-426,-426,,-426,-426,-426,', ',,,,433,437,,,432,,,-426,-426,,-426,,-426,161,162,,157,139,140,141,148', '145,147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160', '156,155,151,152,146,144,136,159,137,,,165,,,,,742,430,,,743,,,,,,,,', '161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150', ',,,,,273,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', ',,165,,,,,744,437,,,745,,,,,,,,,161,162,158,157,139,140,141,148,145', '147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156', '155,151,152,146,144,136,159,137,,564,165,561,560,559,569,562,,,,,,,', ',,572,,,,,158,,,,,,,,,564,,561,560,559,569,562,,567,691,437,,,692,,', '572,577,576,580,579,,161,162,,157,139,140,141,148,145,147,,,142,143', ',,567,163,164,149,150,,,,,,273,580,579,,,573,,,154,153,,138,160,156', '155,151,152,146,144,136,159,137,,,165,,,,,688,430,,,689,,573,,,,,,,161', '162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,', ',,273,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,', '165,,,,,426,430,,,427,,,,,,,,,161,162,158,157,139,140,141,148,145,147', ',,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156,155', '151,152,146,144,136,159,137,,564,165,561,560,559,569,562,,,,,,,,,,572', ',,,,158,,,,,,,,,,,,,,,,,567,657,437,,,658,,,,577,576,580,579,,161,162', ',157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,,,222,,,273', ',,,,573,,,154,153,,138,160,156,155,151,152,146,144,136,159,137,,564', '165,561,560,559,569,562,564,,561,560,559,569,562,,,572,,,,,158,,572', '564,,561,560,559,569,562,,,,,,,,567,760,572,,,,,567,,577,576,580,579', ',,,577,576,580,579,,,,,567,,564,,561,560,559,569,562,577,576,580,579', ',,,655,430,572,,656,573,,,,,,,573,161,162,,157,139,140,141,148,145,147', ',567,142,143,,,573,163,164,149,150,,580,579,,,273,,,,,,,,154,153,,138', '160,156,155,151,152,146,144,136,159,137,,564,165,561,560,559,569,562', '573,,,,,,,,,572,,,,,158,,,,,,,,,564,,561,560,559,569,562,,567,1041,437', ',,1042,,,572,577,576,580,579,,161,162,,157,139,140,141,148,145,147,', ',142,143,,,567,163,164,149,150,,,,,,273,580,579,,,573,,,154,153,,138', '160,156,155,151,152,146,144,136,159,137,,,165,,,,,1039,430,,,1040,,573', ',,,,,,161,162,158,157,139,140,141,148,145,147,,,142,143,,,,163,164,149', '150,,,,,,273,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159', '137,,,165,,,,,487,430,,,488,,,,,,,,,161,162,158,157,139,140,141,148', '145,147,,,142,143,,,,163,164,149,150,,,,,,,,,,,,,,154,153,,138,160,156', '155,151,152,146,144,136,159,137,,564,165,561,560,559,569,562,564,,561', '560,559,569,562,,,572,,,,,158,,572,564,,561,560,559,569,562,564,,561', '560,559,569,562,567,,572,,,,,567,,572,,580,579,,,,577,576,580,579,,', ',,567,,,,,,,567,,577,576,580,579,,,,1011,437,580,579,1010,573,,,,,,', '573,161,162,,157,139,140,141,148,145,147,,,142,143,,,573,163,164,149', '150,,,573,,,273,,,,,,,,154,153,,138,160,156,155,151,152,146,144,136', '159,137,,564,165,561,560,559,569,562,,,863,437,,,864,,,572,,,,,158,161', '162,,157,139,140,141,148,145,147,,,142,143,,,567,163,164,149,150,,,', ',,273,580,579,,,,,,154,153,,138,160,156,155,151,152,146,144,136,159', '137,,,165,,,,,487,430,,,488,,573,,,,,,,161,162,158,157,139,140,141,148', '145,147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160', '156,155,151,152,146,144,136,159,137,,564,165,561,560,559,569,562,,,', ',,,,,,572,,,,,158,,,,,,,,,,,,,,,,,567,657,437,,,658,,,,577,576,580,579', ',161,162,,157,139,140,141,148,145,147,,,142,143,,,,163,164,149,150,', ',,,,273,,,,,573,,,154,153,,138,160,156,155,151,152,146,144,136,159,137', ',,165,,,,,655,430,,,656,,,,,,,,,161,162,158,157,139,140,141,148,145', '147,,,142,143,,,,163,164,149,150,,,,,,273,,,,,,,,154,153,,138,160,156', '155,151,152,146,144,136,159,137,,,165,,,,,,,,,,,,,,,,,,,,158' ] racc_action_table = arr = ::Array.new(26475, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '433,1054,434,1041,913,1040,312,433,433,433,602,64,669,433,433,668,433', '61,992,304,992,22,365,743,481,433,304,29,860,365,935,594,1039,417,341', '304,433,433,342,433,433,433,433,433,455,742,669,698,698,352,442,80,61', '549,689,587,481,22,348,80,481,481,481,481,744,861,349,433,433,433,433', '433,433,433,433,433,433,433,433,433,433,1041,862,433,433,433,586,433', '450,450,359,433,29,312,433,763,763,359,64,433,455,433,668,433,433,433', '433,433,433,433,745,433,433,433,29,1054,602,1041,913,1040,1054,689,1041', '913,1040,432,433,433,743,433,744,433,432,432,432,602,594,698,432,432', '602,432,860,433,935,860,1039,860,341,935,742,1039,342,341,352,587,689', '342,549,689,587,432,432,348,432,432,432,432,432,744,861,349,391,689', '388,683,745,688,450,506,598,369,862,41,598,763,586,862,369,683,415,586', '432,432,432,432,432,432,432,432,432,432,432,432,432,432,731,731,432', '432,432,622,432,225,226,745,432,412,321,432,317,317,44,44,432,41,432', '390,432,432,432,432,432,432,432,391,432,388,432,41,506,506,506,463,688', '596,619,464,794,465,657,432,432,655,432,638,432,657,657,657,321,506', '657,657,657,466,657,495,432,225,226,496,622,622,321,657,657,657,657', '688,761,622,688,597,387,761,657,657,384,657,657,657,657,657,381,889', '688,638,596,317,317,44,44,393,794,596,889,619,619,655,596,638,513,656', '596,691,619,657,657,657,657,657,657,657,657,657,657,657,657,657,657', '228,596,657,657,657,597,657,657,889,889,657,514,597,657,657,820,657', '597,657,382,657,597,657,657,657,657,657,657,657,710,657,657,657,393', '393,393,494,691,656,597,710,517,889,377,691,657,657,657,657,691,657', '658,657,691,961,493,228,961,658,658,658,426,657,658,658,658,485,658', '820,965,494,691,519,710,710,820,965,658,658,658,382,382,382,547,820', '965,547,658,658,493,658,658,658,658,658,931,524,931,931,931,485,931', '820,426,377,377,377,710,725,375,725,725,725,527,725,535,863,426,658', '658,658,658,658,658,658,658,658,658,658,658,658,658,42,18,658,658,658', '17,658,658,360,536,658,385,17,658,658,360,658,545,658,548,658,17,658', '658,658,658,658,658,658,363,658,333,658,552,333,553,363,863,375,375', '375,931,42,18,863,658,658,658,658,863,658,101,658,863,725,427,42,18', '101,101,101,366,658,101,101,101,555,101,366,27,556,863,385,385,385,101', '27,101,101,101,461,756,379,537,537,379,756,101,101,362,101,101,101,101', '101,703,362,427,703,557,361,566,722,367,722,722,722,361,722,126,367', '427,461,574,126,126,461,461,101,101,101,101,101,101,101,101,101,101', '101,101,101,101,293,578,101,101,101,293,101,101,722,581,101,379,379', '101,101,583,101,722,101,353,101,588,101,101,101,101,101,101,101,589', '101,351,101,339,364,339,339,339,339,339,334,364,1043,334,347,101,101', '101,101,339,101,98,101,346,864,757,757,626,98,98,98,864,101,98,98,98', '864,98,345,523,864,339,339,345,629,98,523,98,98,98,339,339,339,339,5', '523,631,98,98,5,98,98,98,98,98,932,635,932,932,932,335,932,567,639,567', '567,567,331,567,851,325,851,851,851,644,851,339,322,98,98,98,98,98,98', '98,98,98,98,98,98,98,98,650,932,98,98,98,308,98,98,567,318,98,316,308', '98,98,851,98,567,98,659,98,308,98,98,98,98,98,98,98,462,98,849,98,849', '849,849,1009,849,1009,1009,1009,661,1009,667,49,98,98,98,98,1044,98', '49,98,674,857,857,857,857,857,857,49,462,98,857,857,462,462,676,857', '849,857,857,857,857,857,857,857,1,849,1025,1025,311,857,857,857,857', '857,857,857,764,764,857,310,764,764,764,445,857,857,685,857,857,857', '857,857,857,857,857,857,687,857,857,857,307,857,857,690,857,857,857', '445,445,445,445,445,445,445,445,445,445,445,692,445,445,1017,870,445', '445,692,857,870,1017,857,692,693,857,857,692,944,857,1017,857,445,944', '445,857,445,445,445,445,445,445,445,857,445,713,713,1042,857,857,857', '857,857,857,1042,20,20,857,857,1042,445,694,445,1042,697,857,340,340', '857,857,857,699,702,857,857,997,997,997,997,997,997,301,300,974,997', '997,709,299,724,997,974,997,997,997,997,997,997,997,726,974,733,738', '297,997,997,997,997,997,997,997,741,289,997,284,281,280,269,420,997', '997,266,997,997,997,997,997,997,997,997,997,234,997,997,997,773,997', '997,230,997,997,997,420,420,420,420,420,420,420,420,420,420,420,975', '420,420,976,229,420,420,975,997,778,976,997,227,796,997,997,975,797', '997,976,997,420,799,420,997,420,420,420,420,420,420,420,997,420,800', '801,350,997,997,997,997,997,997,350,903,803,997,997,804,420,805,903', '350,806,997,207,819,997,997,997,903,3,997,997,996,996,996,996,996,996', '823,124,978,996,996,826,827,832,996,978,996,996,996,996,996,996,996', '833,978,834,835,839,996,996,996,996,996,996,996,840,842,996,843,845', '848,850,660,996,996,853,996,996,996,996,996,996,996,996,996,90,996,996', '996,856,996,996,89,996,996,996,660,660,660,660,660,660,660,660,660,660', '660,323,660,660,306,88,660,660,323,996,87,306,996,72,1056,996,996,323', '866,996,306,996,660,871,660,996,660,660,660,660,660,660,660,996,660', '872,873,600,996,996,996,996,996,996,600,305,882,996,996,883,660,48,305', '600,900,996,43,904,996,996,996,305,905,996,996,993,993,993,993,993,993', '907,908,748,993,993,40,933,25,993,748,993,993,993,993,993,993,993,937', '748,938,943,951,993,993,993,993,993,993,993,954,901,993,901,901,901', '955,901,993,993,956,993,993,993,993,993,993,993,993,993,957,993,993', '993,959,993,993,969,993,993,993,696,696,696,696,696,696,696,696,696', '696,696,224,696,696,977,980,696,696,224,993,981,982,993,983,984,993', '993,224,986,993,19,993,696,16,696,993,696,696,696,696,696,696,696,993', '696,1010,1011,1013,993,993,993,993,993,993,15,1024,1029,993,993,1030', '696,1031,1032,1033,1034,993,1035,1038,993,993,993,13,425,993,993,988', '988,988,988,988,988,424,421,,988,988,,,,988,,988,988,988,988,988,988', '988,682,682,682,682,682,988,988,988,988,988,988,988,,,988,295,295,295', '295,295,988,988,,988,988,988,988,988,988,988,988,988,,988,988,988,,988', '988,,988,988,988,278,278,278,278,278,278,278,278,278,278,278,,278,278', ',,278,278,,988,,,988,,,988,988,,,988,,988,278,,278,988,278,278,278,278', '278,278,278,988,278,,,,988,988,988,988,988,988,,,,988,988,,278,,,,,988', ',,988,988,988,,,988,988,973,973,973,973,973,973,,,,973,973,,,,973,,973', '973,973,973,973,973,973,9,9,9,9,9,973,973,973,973,973,973,973,,,973', '512,512,512,512,512,973,973,,973,973,973,973,973,973,973,973,973,,973', '973,973,,973,973,,973,973,973,775,775,775,775,775,775,775,775,775,775', '775,,775,775,,,775,775,,973,,,973,,,973,973,,,973,,973,775,,775,973', '775,775,775,775,775,775,775,973,775,,,,973,973,973,973,973,973,,,,973', '973,,775,,,,,973,,,973,973,973,,,973,973,940,940,940,940,940,940,,,', '940,940,,,,940,,940,940,940,940,940,940,940,,,,,,940,940,940,940,940', '940,940,,,940,,,,,,940,940,,940,940,940,940,940,940,940,940,940,,940', '940,940,,940,940,,940,940,940,780,780,780,780,780,780,780,780,780,780', '780,,780,780,,,780,780,,940,,,940,,,940,940,,,940,,940,780,,780,940', '780,780,780,780,780,780,780,940,780,,,,940,940,940,940,940,940,,,,940', '940,,780,,,,,940,,,940,940,940,,,940,940,2,2,2,2,2,2,,,,2,2,,,,2,,2', '2,2,2,2,2,2,,,,,,2,2,2,2,2,2,2,,,2,,,,,,2,2,2,2,2,2,2,2,2,2,2,2,,2,2', '2,,2,2,,2,2,2,782,782,782,782,782,782,782,782,782,782,782,,782,782,', ',782,782,,2,,,2,,,2,2,,,2,,2,782,,782,2,782,782,782,782,782,782,782', '2,782,,,,2,2,2,2,2,2,,,,2,2,,782,,,,,2,,,2,2,2,,,2,2,36,36,36,36,36', '36,,,,36,36,,,,36,,36,36,36,36,36,36,36,,,,,,36,36,36,36,36,36,36,,', '36,,,,,,36,36,,36,36,36,36,36,36,36,36,36,,36,36,36,,36,36,,36,36,36', '785,785,785,785,785,785,785,785,785,785,785,,785,785,,,785,785,,36,', ',36,,,36,36,,,36,,36,785,,785,36,785,785,785,785,785,785,785,36,785', ',,,36,36,36,36,36,36,,,,36,36,,785,,,,,36,,,36,36,36,,,36,36,910,910', '910,910,910,910,,,,910,910,,,,910,,910,910,910,910,910,910,910,,,,,', '910,910,910,910,910,910,910,,,910,,,,,,910,910,,910,910,910,910,910', '910,910,910,910,,910,910,910,,910,910,,910,910,910,787,787,787,787,787', '787,787,787,787,787,787,,787,787,,,787,787,,910,,,910,,,910,910,,,910', ',910,787,,787,910,787,787,787,787,787,787,787,910,787,,,,910,910,910', '910,910,910,,,,910,910,,787,,,,,910,,,910,910,910,,,910,910,906,906', '906,906,906,906,,,,906,906,,,,906,,906,906,906,906,906,906,906,,,,,', '906,906,906,906,906,906,906,,,906,,,,,,906,906,,906,906,906,906,906', '906,906,906,906,,906,906,906,,906,906,,906,906,906,789,789,789,789,789', '789,789,789,789,789,789,,789,789,,,789,789,,906,,,906,,,906,906,,,906', ',906,789,,789,906,789,789,789,789,789,789,789,906,789,,,,906,906,906', '906,906,906,,,,906,906,,789,,,,,906,,,906,906,906,,,906,906,867,867', '867,867,867,867,,,,867,867,,,,867,,867,867,867,867,867,867,867,,,,,', '867,867,867,867,867,867,867,,,867,,,,,,867,867,,867,867,867,867,867', '867,867,867,867,,867,867,867,,867,867,,867,867,867,484,484,484,484,484', '484,484,484,484,484,484,,484,484,,,484,484,,867,,,867,,,867,867,,,867', ',867,484,,484,867,484,484,484,484,484,484,484,867,484,,,,867,867,867', '867,867,867,,,,867,867,484,484,,,,,867,,,867,867,867,,,867,867,858,858', '858,858,858,858,,,,858,858,,,,858,,858,858,858,858,858,858,858,,,,,', '858,858,858,858,858,858,858,,,858,,,,,,858,858,,858,858,858,858,858', '858,858,858,858,,858,858,858,,858,858,,858,858,858,440,440,440,440,440', '440,440,440,440,440,440,,440,440,,,440,440,,858,,,858,,,858,858,,,858', ',858,440,,440,858,440,440,440,440,440,440,440,858,440,,,,858,858,858', '858,858,858,,,,858,858,,440,,,,,858,,,858,858,858,,,858,858,825,825', '825,825,825,825,,,,825,825,,,,825,,825,825,825,825,825,825,825,,,,,', '825,825,825,825,825,825,825,,,825,,,,,,825,825,,825,825,825,825,825', '825,825,825,825,,825,825,825,,825,825,,825,825,825,885,885,885,885,885', '885,885,885,885,885,885,,885,885,,,885,885,,825,,,825,,,825,825,,,825', ',825,885,,885,825,885,885,885,885,885,885,885,825,885,,,,825,825,825', '825,825,825,,,,825,825,,885,,,,,825,,,825,825,825,,,825,825,815,815', '815,815,815,815,,,,815,815,,,,815,,815,815,815,815,815,815,815,,,,,', '815,815,815,815,815,815,815,,,815,,,,,,815,815,,815,815,815,815,815', '815,815,815,815,,815,815,815,,815,815,,815,815,815,888,888,888,888,888', '888,888,888,888,888,888,,888,888,,,888,888,,815,,,815,,,815,815,,,815', ',815,888,,888,815,888,888,888,888,888,888,888,815,888,,,,815,815,815', '815,815,815,,,,815,815,,888,,,,,815,,,815,815,815,,,815,815,814,814', '814,814,814,814,,,,814,814,,,,814,,814,814,814,814,814,814,814,,,,,', '814,814,814,814,814,814,814,,,814,,,,,,814,814,,814,814,814,814,814', '814,814,814,814,,814,814,814,,814,814,,814,814,814,24,24,24,24,24,24', '24,24,24,24,24,,24,24,,,24,24,,814,,,814,,,814,814,,,814,,814,24,,24', '814,24,24,24,24,24,24,24,814,24,,,,814,814,814,814,814,814,,,,814,814', ',24,,,,,814,,,814,814,814,,,814,814,209,209,209,209,209,209,,,,209,209', ',,,209,,209,209,209,209,209,209,209,,,,,,209,209,209,209,209,209,209', ',,209,,,,,,209,209,,209,209,209,209,209,209,209,209,209,,209,209,209', ',209,209,,209,209,209,533,533,533,533,533,533,533,533,533,533,533,,533', '533,,,533,533,,209,,,209,,,209,209,,,209,,209,533,,533,209,533,533,533', '533,533,533,533,209,533,,,,209,209,209,209,209,209,,,,209,209,,533,', ',,,209,,,209,209,209,,,209,209,810,810,810,810,810,810,,,,810,810,,', ',810,,810,810,810,810,810,810,810,,,,,,810,810,810,810,810,810,810,', ',810,,,,,480,810,810,,810,810,810,810,810,810,810,810,810,,810,810,810', ',810,810,,810,810,810,483,483,483,483,483,483,483,483,480,483,483,,480', '480,480,480,483,483,,810,,,810,,,810,810,,,810,,810,483,,483,810,483', '483,483,483,483,483,483,810,483,,,,810,810,810,810,810,810,,,,810,810', ',987,,987,987,987,810,987,,810,810,810,,,810,810,233,233,233,233,233', '233,,,,233,233,,,,233,,233,233,233,233,233,233,233,987,,,,,233,233,233', '233,233,233,233,,1023,233,1023,1023,1023,,1023,233,233,,233,233,233', '233,233,233,233,233,233,,233,233,233,,233,233,,233,233,233,471,,,,,', ',985,1023,985,985,985,,985,,,471,471,,233,,,233,,469,233,233,,,233,', '233,471,,471,233,471,471,471,471,469,469,471,233,471,985,,,233,233,233', '233,233,233,,,469,233,233,,469,469,469,469,,233,,,233,233,233,,,233', '233,765,765,765,765,765,765,,,,765,765,,,,765,,765,765,765,765,765,765', '765,,,,,,765,765,765,765,765,765,765,,,765,,,,,,765,765,,765,765,765', '765,765,765,765,765,765,,765,765,765,,765,765,,765,765,765,475,475,475', '475,475,475,475,,,475,475,,,,,,475,475,,765,,,765,,,765,765,,,765,,765', '475,,475,765,475,475,475,475,475,475,475,765,475,,,,765,765,765,765', '765,765,,,,765,765,,,,,,,765,,,765,765,765,,,765,765,759,759,759,759', '759,759,,,,759,759,,,,759,,759,759,759,759,759,759,759,,,,,,759,759', '759,759,759,759,759,,,759,,,,,,759,759,,759,759,759,759,759,759,759', '759,759,,759,759,759,,759,759,,759,759,759,474,,,,,,,,,,,,,,,,474,474', ',759,,,759,,,759,759,,,759,,759,474,,474,759,474,474,474,474,,,474,759', '474,,,,759,759,759,759,759,759,,,,759,759,,,,,,,759,,,759,759,759,,', '759,759,758,758,758,758,758,758,,,,758,758,,,,758,,758,758,758,758,758', '758,758,,,,,,758,758,758,758,758,758,758,,,758,,,,,,758,758,,758,758', '758,758,758,758,758,758,758,,758,758,758,,758,758,,758,758,758,459,459', '459,459,459,459,459,459,459,459,459,,459,459,,,459,459,,758,,,758,,', '758,758,,,758,,758,459,,459,758,459,459,459,459,459,459,459,758,459', ',,,758,758,758,758,758,758,,,,758,758,,,,,,,758,,,758,758,758,,,758', '758,298,298,298,298,298,298,,,,298,298,,,,298,,298,298,298,298,298,298', '298,,,,,,298,298,298,298,298,298,298,,,298,,,,,,298,298,,298,298,298', '298,298,298,298,298,298,,298,298,298,,298,298,,298,298,298,472,,,,,', ',,,,,,,,,,472,472,,298,,,298,,,298,298,,,298,,298,472,,472,298,472,472', '472,472,,,472,298,472,,,,298,298,298,298,298,298,,,,298,298,,,,,,,298', ',,298,298,298,,,298,298,708,708,708,708,708,708,,,,708,708,,,,708,,708', '708,708,708,708,708,708,,,,,,708,708,708,708,708,708,708,,,708,,,,,', '708,708,,708,708,708,708,708,708,708,708,708,,708,708,708,,708,708,', '708,708,708,476,476,476,476,476,476,476,,,476,476,,,,,,476,476,,708', ',,708,,,708,708,,,708,,708,476,,476,708,476,476,476,476,476,476,476', '708,476,,,,708,708,708,708,708,708,,,,708,708,,,,,,,708,,,708,708,708', ',,708,708,707,707,707,707,707,707,,,,707,707,,,,707,,707,707,707,707', '707,707,707,,,,,,707,707,707,707,707,707,707,,,707,,,,,,707,707,,707', '707,707,707,707,707,707,707,707,,707,707,707,,707,707,,707,707,707,470', '470,470,470,470,470,470,,,470,470,,,,,,470,470,,707,,,707,,,707,707', ',,707,,707,470,,470,707,470,470,470,470,470,470,470,707,470,,,,707,707', '707,707,707,707,,,,707,707,,,,,,,707,,,707,707,707,,,707,707,303,303', '303,303,303,303,,,,303,303,,,,303,,303,303,303,303,303,303,303,,,,,', '303,303,303,303,303,303,303,,,303,,,,,,303,303,,303,303,303,303,303', '303,303,303,303,,303,303,303,,303,303,,303,303,303,477,477,477,477,477', '477,477,,,477,477,,,,,,477,477,,303,,,303,,,303,303,,,303,,303,477,', '477,303,477,477,477,477,477,477,477,303,477,,,,303,303,303,303,303,303', ',,,303,303,,,,,,,303,,,303,303,303,,,303,303,328,328,328,328,328,328', ',,,328,328,,,,328,,328,328,328,328,328,328,328,,,,,,328,328,328,328', '328,328,328,,,328,,,,,,328,328,,328,328,328,328,328,328,328,328,328', ',328,328,328,,328,328,,328,328,328,460,460,460,460,460,460,460,460,460', '460,460,,460,460,,,460,460,,328,,,328,,,328,328,,,328,,328,460,,460', '328,460,460,460,460,460,460,460,328,460,,,,328,328,328,328,328,328,', ',,328,328,,,,,,,328,,,328,328,328,,,328,328,585,585,585,585,585,585', ',,,585,585,,,,585,,585,585,585,585,585,585,585,,,,,,585,585,585,585', '585,585,585,,,585,,,,,,585,585,,585,585,585,585,585,585,585,585,585', ',585,585,585,,585,585,,585,585,585,478,478,478,478,478,478,478,,,478', '478,,,,,,478,478,,585,,,585,,,585,585,,,585,,585,478,,478,585,478,478', '478,478,478,478,478,585,478,,,,585,585,585,585,585,585,,,,585,585,,', ',,,,585,,,585,585,585,,,585,585,582,582,582,582,582,582,,,,582,582,', ',,582,,582,582,582,582,582,582,582,,,,,,582,582,582,582,582,582,582', ',,582,,,,,,582,582,,582,582,582,582,582,582,582,582,582,,582,582,582', ',582,582,,582,582,582,479,479,479,479,479,479,479,,,479,479,,,,,,479', '479,,582,,,582,,,582,582,,,582,,582,479,,479,582,479,479,479,479,479', '479,479,582,479,,,,582,582,582,582,582,582,,,,582,582,,,,,,,582,,,582', '582,582,,,582,582,406,406,406,406,406,406,,,,406,406,,,,406,,406,406', '406,406,406,406,406,,,,,,406,406,406,406,406,406,406,,,406,,,,,,406', '406,406,406,406,406,406,406,406,406,406,406,,406,406,406,,406,406,,406', '406,406,482,482,482,482,482,482,482,,,482,482,,,,,,482,482,,406,,,406', ',,406,406,,,406,,406,482,,482,406,482,482,482,482,482,482,482,406,482', ',,,406,406,406,406,406,406,,,,406,406,,,,,,,406,,,406,406,406,,,406', '406,795,795,795,,795,,,,795,795,,,,795,,795,795,795,795,795,795,795', ',,,,,795,795,795,795,795,795,795,,,795,,,,,,,795,,,795,795,795,795,795', '795,795,795,,795,795,795,,795,795,,795,795,795,473,,,,,,,,,,,,,,,,473', '473,,795,,,795,,,795,795,,,795,,,473,,473,795,473,473,473,473,,,473', '795,473,,,,795,795,795,795,795,795,,,,795,795,,,,,,,795,,,795,795,795', ',,795,795,886,886,886,,886,,,,886,886,,,,886,,886,886,886,886,886,886', '886,,,,,,886,886,886,886,886,886,886,,,886,,,,,,,886,,,886,886,886,886', '886,886,886,886,886,886,886,886,,886,886,,886,886,886,468,,,,,,,,,,', ',,,,,468,468,,886,,,886,,,886,886,,,886,,,468,886,468,886,468,468,468', '468,,,,886,,,,,886,886,886,886,886,886,,,,886,886,,,,,,,886,,886,886', '886,886,,,886,886,868,868,868,,868,,,,868,868,,,,868,,868,868,868,868', '868,868,868,,,,,,868,868,868,868,868,868,868,,,868,,,,,,,868,,,868,868', '868,868,868,868,868,868,,868,868,868,,868,868,,868,868,868,467,,,,,', ',,,,,,,,,,467,467,,868,,,868,,,868,868,,,868,,,467,,467,868,467,467', '467,467,,,,868,,,,,868,868,868,868,868,868,,,,868,868,,,,,,,868,,,868', '868,868,,,868,868,677,677,677,,677,,,,677,677,,,,677,,677,677,677,677', '677,677,677,,,,,,677,677,677,677,677,677,677,,,677,,,,,,,677,,,677,677', '677,677,677,677,677,677,,677,677,677,,677,677,,677,677,677,,,,,,,,,', ',,,,,,,,,,677,,,677,,,677,677,,,677,,,,,,677,,,,,,,,677,,,,,677,677', '677,677,677,677,,,,677,677,,,,,,,677,,,677,677,677,,,677,677,653,653', '653,,653,,,,653,653,,,,653,,653,653,653,653,653,653,653,,,,,,653,653', '653,653,653,653,653,,,653,,,,,,,653,,,653,653,653,653,653,653,653,653', ',653,653,653,,653,653,,653,653,653,,,,,,,,,,,,,,,,,,,,653,,,653,,,653', '653,,,653,,,,,,653,,,,,,,,653,,,,,653,653,653,653,653,653,,,,653,653', ',,,,,,653,,,653,653,653,,,653,653,319,319,319,,319,,,,319,319,,,,319', ',319,319,319,319,319,319,319,,,,,,319,319,319,319,319,319,319,,,319', ',,,,,,319,,,319,319,319,319,319,319,319,319,,319,319,319,,319,319,,', ',319,,,,,,,,,,,,,,,,,,,,319,,,319,,,319,319,,,319,,,,,,,,,,,,,,,,,,', '319,319,319,319,319,319,,,,319,319,,,,,,,319,,,319,319,319,,,319,319', '652,652,652,,652,,,,652,652,,,,652,,652,652,652,652,652,652,652,,,,', ',652,652,652,652,652,652,652,,,652,,,,,,,652,,,652,652,652,652,652,652', '652,652,,652,652,652,,652,652,,652,652,652,,,,,,,,,,,,,,,,,,,,652,,', '652,,,652,652,,,652,,,,,,652,,,,,,,,652,,,,,652,652,652,652,652,652', ',,,652,652,,,,,,,652,,,652,652,652,,,652,652,649,649,649,,649,,,,649', '649,,,,649,,649,649,649,649,649,649,649,,,,,,649,649,649,649,649,649', '649,,,649,,,,,,,649,,,649,649,649,649,649,649,649,649,,649,649,649,', '649,649,,649,649,649,,,,,,,,,,,,,,,,,,,,649,,,649,,,649,649,,,649,,', ',,,649,,,,,,,,649,,,,,649,649,649,649,649,649,,,,649,649,,,,,,,649,', ',649,649,649,,,649,649,648,648,648,,648,,,,648,648,,,,648,,648,648,648', '648,648,648,648,,,,,,648,648,648,648,648,648,648,,,648,,,,,,,648,,,648', '648,648,648,648,648,648,648,,648,648,648,,648,648,,648,648,648,,,,,', ',,,,,,,,,,,,,,648,,,648,,,648,648,,,648,,,,,,648,,,,,,,,648,,,,,648', '648,648,648,648,648,,,,648,648,,,,,,,648,,,648,648,648,,,648,648,643', '643,643,,643,,,,643,643,,,,643,,643,643,643,643,643,643,643,,,,,,643', '643,643,643,643,643,643,,,643,,,,,,,643,,,643,643,643,643,643,643,643', '643,,643,643,643,,643,643,,643,643,643,,,,,,,,,,,,,,,,,,,,643,,,643', ',,643,643,,,643,,,,,,643,,,,,,,,643,,,,,643,643,643,643,643,643,,,,643', '643,,,,,,,643,,,643,643,643,,,643,643,327,327,327,,327,,,,327,327,,', ',327,,327,327,327,327,327,327,327,,,,,,327,327,327,327,327,327,327,', ',327,,,,,,,327,,,327,327,327,327,327,327,327,327,,327,327,327,,327,327', ',327,327,327,,,,,,,,,,,,,,,,,,,,327,,,327,327,,327,327,,,327,,,,,,327', ',,,,,,,327,,,,,327,327,327,327,327,327,,,,327,327,,,,,,,327,,,327,327', '327,,,327,327,330,330,330,,330,,,,330,330,,,,330,,330,330,330,330,330', '330,330,,,,,,330,330,330,330,330,330,330,,,330,,,,,,,330,,,330,330,330', '330,330,330,330,330,,330,330,330,,330,330,,330,330,330,,,,,,,,,,,,,', ',,,,,,330,,,330,,,330,330,,,330,,,,,,330,,,,,,,,330,,,,,330,330,330', '330,330,330,,,,330,330,,,,,,,330,,,330,330,330,,,330,330,642,642,642', ',642,,,,642,642,,,,642,,642,642,642,642,642,642,642,,,,,,642,642,642', '642,642,642,642,,,642,,,,,,,642,,,642,642,642,642,642,642,642,642,,642', '642,642,,642,642,,642,642,642,,,,,,,,,,,,,,,,,,,,642,,,642,,,642,642', ',,642,,,,,,642,,,,,,,,642,,,,,642,642,642,642,642,642,,,,642,642,,,', ',,,642,,,642,642,642,,,642,642,641,641,641,,641,,,,641,641,,,,641,,641', '641,641,641,641,641,641,,,,,,641,641,641,641,641,641,641,,,641,,,,,', ',641,,,641,641,641,641,641,641,641,641,641,641,641,641,,641,641,,641', '641,641,,,,,,,,,,,,,,,,,,,,641,,,641,,,641,641,,,641,,,,641,,641,,,', ',,,,641,,,,,641,641,641,641,641,641,,,,641,641,,,,,,,641,,641,641,641', '641,,,641,641,640,640,640,,640,,,,640,640,,,,640,,640,640,640,640,640', '640,640,,,,,,640,640,640,640,640,640,640,,,640,,,,,,,640,,,640,640,640', '640,640,640,640,640,640,640,640,640,,640,640,,640,640,640,,,,,,,,,,', ',,,,,,,,,640,,,640,,,640,640,,,640,,640,,640,,640,,,,,,,,640,,,,,640', '640,640,640,640,640,,,,640,640,,,,,,,640,,640,640,640,640,,,640,640', '637,637,637,,637,,,,637,637,,,,637,,637,637,637,637,637,637,637,,,,', ',637,637,637,637,637,637,637,,,637,,,,,,,637,,,637,637,637,637,637,637', '637,637,,637,637,637,,637,637,,637,637,637,,,,,,,,,,,,,,,,,,,,637,,', '637,,,637,637,,,637,,,,,,637,,,,,,,,637,,,,,637,637,637,637,637,637', ',,,637,637,,,,,,,637,,,637,637,637,,,637,637,336,336,336,,336,,,,336', '336,,,,336,,336,336,336,336,336,336,336,,,,,,336,336,336,336,336,336', '336,,,336,,,,,,,336,,,336,336,336,336,336,336,336,336,336,336,336,336', ',336,336,,336,336,336,,,,,,,,,,,,,,,,,,,,336,,,336,,,336,336,,,336,', ',,,,336,,,,,,,,336,,,,,336,336,336,336,336,336,,,,336,336,,,,,,,336', ',336,336,336,336,,,336,336,636,636,636,,636,,,,636,636,,,,636,,636,636', '636,636,636,636,636,,,,,,636,636,636,636,636,636,636,,,636,,,,,,,636', ',,636,636,636,636,636,636,636,636,,636,636,636,,636,636,,636,636,636', ',,,,,,,,,,,,,,,,,,,636,,,636,,,636,636,,,636,,636,,,,636,,,,,,,,636', ',,,,636,636,636,636,636,636,,,,636,636,,,,,,,636,,,636,636,636,,,636', '636,343,343,343,,343,,,,343,343,,,,343,,343,343,343,343,343,343,343', ',,,,,343,343,343,343,343,343,343,,,343,,,,,,,343,,,343,343,343,343,343', '343,343,343,,343,343,343,,343,343,,343,343,343,,,,,,,,,,,,,,,,,,,,343', ',,343,,,343,343,,,343,,,,,,343,,,,,,,,343,,,,,343,343,343,343,343,343', ',,,343,343,,,,,,,343,,,343,343,343,,,343,343,344,344,344,,344,,,,344', '344,,,,344,,344,344,344,344,344,344,344,,,,,,344,344,344,344,344,344', '344,,,344,,,,,,,344,,,344,344,344,344,344,344,344,344,,344,344,344,', '344,344,,344,344,344,,,,,,,,,,,,,,,,,,,,344,,,344,,,344,344,,,344,,', ',,,344,,,,,,,,344,,,,,344,344,344,344,344,344,,,,344,344,,,,,,,344,', ',344,344,344,,,344,344,607,607,607,,607,,,,607,607,,,,607,,607,607,607', '607,607,607,607,,,,,,607,607,607,607,607,607,607,,,607,,,,,,,607,,,607', '607,607,607,607,607,607,607,,607,607,607,,607,607,,607,607,607,,,,,', ',,,,,,,,,,,,,,607,,,607,,,607,607,,,607,,,,,,607,,,,,,,,607,,,,,607', '607,607,607,607,607,,,,607,607,,,,,,,607,,,607,607,607,,,607,607,603', '603,603,,603,,,,603,603,,,,603,,603,603,603,603,603,603,603,,,,,,603', '603,603,603,603,603,603,,,603,,,,,,,603,,,603,603,603,603,603,603,603', '603,,603,603,603,,603,603,,603,603,603,,,,,,,,,,,,,,,,,,,,603,,,603', ',,603,603,,,603,,,,,,603,,,,,,,,603,,,,,603,603,603,603,603,603,,,,603', '603,,,,,,,603,,,603,603,603,,,603,603,591,591,591,,591,,,,591,591,,', ',591,,591,591,591,591,591,591,591,,,,,,591,591,591,591,591,591,591,', ',591,,,,,,,591,,,591,591,591,591,591,591,591,591,591,591,591,591,,591', '591,,591,591,591,,,,,,,,,,,,,,,,,,,,591,,,591,,,591,591,,,591,,591,', '591,,591,,,,,,,,591,,,,,591,591,591,591,591,591,,,,591,591,,,,,,,591', ',591,591,591,591,,,591,591,356,356,356,,356,,,,356,356,,,,356,,356,356', '356,356,356,356,356,,,,,,356,356,356,356,356,356,356,,,356,,,,,,,356', ',,356,356,356,356,356,356,356,356,,356,356,356,,356,356,,,,356,,,,,', ',,,,,,,,,,,,,,356,,,356,,,356,356,,,356,,,,,,,,,,,,,,,,,,,356,356,356', '356,356,356,,,,356,356,,,,,,,356,,,356,356,356,,,356,356,358,358,358', ',358,,,,358,358,,,,358,,358,358,358,358,358,358,358,,,,,,358,358,358', '358,358,358,358,,,358,,,,,,,358,,,358,358,358,358,358,358,358,358,,358', '358,358,,358,358,,,,358,,,,,,,,,,,,,,,,,,,,358,,,358,,,358,358,,,358', ',,,,,,,,,,,,,,,,,,358,358,358,358,358,358,,,,358,358,,,,,,,358,,,358', '358,358,,,358,358,1014,1014,1014,,1014,,,,1014,1014,,,,1014,,1014,1014', '1014,1014,1014,1014,1014,,,,,,1014,1014,1014,1014,1014,1014,1014,,,1014', ',,,,,,1014,,,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014,1014', '1014,,1014,1014,,1014,1014,1014,,,,,,,,,,,,,,,,,,,,1014,,,1014,,,1014', '1014,,,1014,,1014,,1014,,1014,,,,,,,,1014,,,,,1014,1014,1014,1014,1014', '1014,,,,1014,1014,,,,,,,1014,,1014,1014,1014,1014,,,1014,1014,416,416', '416,,416,,,,416,416,,,,416,,416,416,416,416,416,416,416,,,,,,416,416', '416,416,416,416,416,,,416,,,,,,,416,,,416,416,416,416,416,416,416,416', ',416,416,416,,416,416,,416,416,416,,,,,,,,,,,,,,,,,,,,416,,,416,,,416', '416,,,416,,,,,,416,,,,,,,,416,,,,,416,416,416,416,416,416,,,,416,416', ',,,,,,416,,,416,416,416,,,416,416,570,570,570,,570,,,,570,570,,,,570', ',570,570,570,570,570,570,570,,,,,,570,570,570,570,570,570,570,,,570', ',,,,,,570,,,570,570,570,570,570,570,570,570,,570,570,570,,570,570,,570', '570,570,,,,,,,,,,,,,,,,,,,,570,,,570,,,570,570,,,570,,,,,,570,,,,,,', ',570,,,,,570,570,570,570,570,570,,,,570,570,,,,,,,570,,,570,570,570', ',,570,570,543,543,543,,543,,,,543,543,,,,543,,543,543,543,543,543,543', '543,,,,,,543,543,543,543,543,543,543,,,543,,,,,,,543,,,543,543,543,543', '543,543,543,543,543,543,543,543,,543,543,,543,543,543,,,,,,,,,,,,,,', ',,,,,543,,,543,,,543,543,,,543,,,,,,543,,,,,,,,543,,,,,543,543,543,543', '543,543,,,,543,543,,,,,,,543,,543,543,543,543,,,543,543,23,23,23,,23', ',,,23,23,,,,23,,23,23,23,23,23,23,23,,,,,,23,23,23,23,23,23,23,,,23', ',,,,,,23,,,23,23,23,23,23,23,23,23,,23,23,23,,23,23,,23,23,23,,,,,,', ',,,,,,,,,,,,,23,,,23,,,23,23,,,23,,,,,,23,,,,,,,,23,,,,,23,23,23,23', '23,23,,,,23,23,,,,,,,23,,,23,23,23,,,23,23,939,939,939,,939,,,,939,939', ',,,939,,939,939,939,939,939,939,939,,,,,,939,939,939,939,939,939,939', ',,939,,,,,,,939,,,939,939,939,939,939,939,939,939,,939,939,939,,939', '939,,939,939,939,,,,,,,,,,,,,,,,,,,,939,,,939,,,939,939,,,939,,939,', ',,939,,,,,,,,939,,,,,939,939,939,939,939,939,,,,939,939,,,,,,,939,,', '939,939,939,,,939,939,914,914,914,,914,,,,914,914,,,,914,,914,914,914', '914,914,914,914,,,,,,914,914,914,914,914,914,914,,,914,,,,,,,914,,,914', '914,914,914,914,914,914,914,,914,914,914,,914,914,,,,914,,,,,,,,,,,', ',,,,,,,,914,,,914,,,914,914,,,914,,,,,,,,,,,,,,,,,,,914,914,914,914', '914,914,,,,914,914,,,,,,,914,,,914,914,914,,,914,914,540,540,540,,540', ',,,540,540,,,,540,,540,540,540,540,540,540,540,,,,,,540,540,540,540', '540,540,540,,,540,,,,,,,540,,,540,540,540,540,540,540,540,540,540,540', '540,540,,540,540,,540,540,540,,,,,,,,,,,,,,,,,,,,540,,,540,,,540,540', ',,540,,540,,,,540,,,,,,,,540,,,,,540,540,540,540,540,540,,,,540,540', ',,,,,,540,,540,540,540,540,,,540,540,32,32,32,,32,,,,32,32,,,,32,,32', '32,32,32,32,32,32,,,,,,32,32,32,32,32,32,32,,,32,,,,,,,32,,,32,32,32', '32,32,32,32,32,32,32,32,32,,32,32,,32,32,32,,,,,,,,,,,,,,,,,,,,32,,', '32,,,32,32,,,32,,32,,32,,32,,,,,,,,32,,,,,32,32,32,32,32,32,,,,32,32', ',,,,,,32,,32,32,32,32,,,32,32,33,33,33,,33,,,,33,33,,,,33,,33,33,33', '33,33,33,33,,,,,,33,33,33,33,33,33,33,,,33,,,,,,,33,,,33,33,33,33,33', '33,33,33,33,33,33,33,,33,33,,33,33,33,,,,,,,,,,,,,,,,,,,,33,,,33,,,33', '33,,,33,,33,,33,,33,,,,,,,,33,,,,,33,33,33,33,33,33,,,,33,33,,,,,,,33', ',33,33,33,33,,,33,33,34,34,34,,34,,,,34,34,,,,34,,34,34,34,34,34,34', '34,,,,,,34,34,34,34,34,34,34,,,34,,,,,,,34,,,34,34,34,34,34,34,34,34', '34,34,34,34,,34,34,,34,34,34,,,,,,,,,,,,,,,,,,,,34,,,34,,,34,34,,,34', ',34,,34,,34,,,,,,,,34,,,,,34,34,34,34,34,34,,,,34,34,,,,,,,34,,34,34', '34,34,,,34,34,534,534,534,,534,,,,534,534,,,,534,,534,534,534,534,534', '534,534,,,,,,534,534,534,534,534,534,534,,,534,,,,,,,534,,,534,534,534', '534,534,534,534,534,,534,534,534,,534,534,,534,534,534,,,,,,,,,,,,,', ',,,,,,534,,,534,,,534,534,,,534,,,,,,534,,,,,,,,534,,,,,534,534,534', '534,534,534,,,,534,534,,,,,,,534,,,534,534,534,,,534,534,37,37,37,,37', ',,,37,37,,,,37,,37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,,37', ',,,,,,37,,,37,37,37,37,37,37,37,37,,37,37,37,,37,37,,,,37,,,,,,,,,,', ',,,,,,,,,37,,,37,,,37,37,,,37,,37,,,,,,,,,,,,,,,,,37,37,37,37,37,37', ',,,37,37,,,,,,,37,,,37,37,37,,,37,37,38,38,38,,38,,,,38,38,,,,38,,38', '38,38,38,38,38,38,,,,,,38,38,38,38,38,38,38,,,38,,,,,,,38,,,38,38,38', '38,38,38,38,38,,38,38,38,,38,38,,,,38,,,,,,,,,,,,,,,,,,,,38,,,38,,,38', '38,,,38,,,,,,,,,,,,,,,,,,,38,38,38,38,38,38,,,,38,38,,,,38,,,38,,,38', '38,38,,,38,38,530,530,530,,530,,,,530,530,,,,530,,530,530,530,530,530', '530,530,,,,,,530,530,530,530,530,530,530,,,530,,,,,,,530,,,530,530,530', '530,530,530,530,530,,530,530,530,,530,530,,530,530,530,,,,,,,,,,,,,', ',,,,,,530,,,530,,,530,530,,,530,,,,,,530,,,,,,,,530,,,,,530,530,530', '530,530,530,,,,530,530,,,,,,,530,,,530,530,530,,,530,530,529,529,529', ',529,,,,529,529,,,,529,,529,529,529,529,529,529,529,,,,,,529,529,529', '529,529,529,529,,,529,,,,,,,529,,,529,529,529,529,529,529,529,529,,529', '529,529,,529,529,,529,529,529,,,,,,,,,,,,,,,,,,,,529,,,529,,,529,529', ',,529,,,,,,529,,,,,,,,529,,,,,529,529,529,529,529,529,,,,529,529,,,', ',,,529,,,529,529,529,,,529,529,902,902,902,,902,,,,902,902,,,,902,,902', '902,902,902,902,902,902,,,,,,902,902,902,902,902,902,902,,,902,,,,,', ',902,,,902,902,902,902,902,902,902,902,,902,902,902,,902,902,,,,902', ',,,,,,,,,,,,,,,,,,,902,,,902,,,902,902,,,902,,,,,,,,,,,,,,,,,,,902,902', '902,902,902,902,,,,902,902,,,,,,,902,,,902,902,902,,,902,902,887,887', '887,,887,,,,887,887,,,,887,,887,887,887,887,887,887,887,,,,,,887,887', '887,887,887,887,887,,,887,,,,,,,887,,,887,887,887,887,887,887,887,887', ',887,887,887,,887,887,,887,887,887,,,,,,,,,,,,,,,,,,,,887,,,887,,,887', '887,,,887,,,,,,887,,,,,,,,887,,,,,887,887,887,887,887,887,,,,887,887', ',,,,,,887,,,887,887,887,,,887,887,45,45,45,,45,,,,45,45,,,,45,,45,45', '45,45,45,45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,,,,45,,,45,45,45,45', '45,45,45,45,,45,45,45,,45,45,,45,45,45,,,,,,,,,,,,,,,,,,,,45,,,45,,', '45,45,,,45,,,,,,45,,,,,,,,45,,,,,45,45,45,45,45,45,,,,45,45,,,,,,,45', ',,45,45,45,,,45,45,46,46,46,,46,,,,46,46,,,,46,,46,46,46,46,46,46,46', ',,,,,46,46,46,46,46,46,46,,,46,,,,,,,46,,,46,46,46,46,46,46,46,46,,46', '46,46,,46,46,,46,46,46,,,,,,,,,,,,,,,,,,,,46,,,46,,,46,46,,,46,,,,,', '46,,,,,,,,46,,,,,46,46,46,46,46,46,,,,46,46,,,,,,,46,,,46,46,46,,,46', '46,526,526,526,,526,,,,526,526,,,,526,,526,526,526,526,526,526,526,', ',,,,526,526,526,526,526,526,526,,,526,,,,,,,526,,,526,526,526,526,526', '526,526,526,,526,526,526,,526,526,,,,526,,,,,,,,,,,,,,,,,,,,526,,,526', ',,526,526,,,526,,,,,,,,,,,,,,,,,,,526,526,526,526,526,526,,,,526,526', ',,,,,,526,,,526,526,526,,,526,526,62,62,62,,62,,,,62,62,,,,62,,62,62', '62,62,62,62,62,,,,,,62,62,62,62,62,62,62,,,62,,,,,,,62,,,62,62,62,62', '62,62,62,62,62,62,62,62,,62,62,,62,62,62,,,,,,,,,,,,,,,,,,,,62,,,62', ',,62,62,,,62,,62,,,,62,,,,,,,,62,,,,,62,62,62,62,62,62,,,,62,62,,,,', ',,62,,62,62,62,62,,,62,62,66,66,66,,66,,,,66,66,,,,66,,66,66,66,66,66', '66,66,,,,,,66,66,66,66,66,66,66,,,66,,,,,,,66,,,66,66,66,66,66,66,66', '66,,66,66,66,,66,66,,66,66,66,,,,,,,,,,,,,,,,,,,,66,,,66,,,66,66,,,66', ',,,,,66,,,,,,,,66,,,,,66,66,66,66,66,66,,,,66,66,,,,,,,66,,,66,66,66', ',,66,66,67,67,67,,67,,,,67,67,,,,67,,67,67,67,67,67,67,67,,,,,,67,67', '67,67,67,67,67,,,67,,,,,,,67,,,67,67,67,67,67,67,67,67,,67,67,67,,67', '67,,67,67,67,,,,,,,,,,,,,,,,,,,,67,,,67,,,67,67,,,67,,,,,,67,,,,,,,', '67,,,,,67,67,67,67,67,67,,,,67,67,,,,,,,67,,,67,67,67,,,67,67,70,70', '70,,70,,,,70,70,,,,70,,70,70,70,70,70,70,70,,,,,,70,70,70,70,70,70,70', ',,70,,,,,,,70,,,70,70,70,70,70,70,70,70,,70,70,70,,70,70,,70,70,70,', ',,,,,,,,,,,,,,,,,,70,,,70,,,70,70,,,70,,,,,,70,,,,,,,,70,,,,,70,70,70', '70,70,70,,,,70,70,70,,,,,70,70,,,70,70,70,,,70,70,71,71,71,,71,,,,71', '71,,,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,,71,,,,,,', '71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,,,,71,,,,,,,,,,,,,,,,', ',,,71,,,71,,,71,71,,,71,,71,,,,,,,,,,,,,,,,,71,71,71,71,71,71,,,,71', '71,,,,,,,71,,,71,71,71,,,71,71,520,520,520,,520,,,,520,520,,,,520,,520', '520,520,520,520,520,520,,,,,,520,520,520,520,520,520,520,,,520,,,,,', ',520,,,520,520,520,520,520,520,520,520,520,520,520,520,,520,520,,520', '520,520,,,,,,,,,,,,,,,,,,,,520,,,520,,,520,520,,,520,,520,,520,,520', ',,,,,,,520,,,,,520,520,520,520,520,520,,,,520,520,,,,,,,520,,520,520', '520,520,,,520,520,855,855,855,,855,,,,855,855,,,,855,,855,855,855,855', '855,855,855,,,,,,855,855,855,855,855,855,855,,,855,,,,,,,855,,,855,855', '855,855,855,855,855,855,,855,855,855,,855,855,,855,855,855,,,,,,,,,', ',,,,,,,,,,855,,,855,,,855,855,,,855,,,,,,855,,,,,,,,855,,,,,855,855', '855,855,855,855,,,,855,855,,,,,,,855,,,855,855,855,,,855,855,8,8,8,8', '8,,,,8,8,,,,8,,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,,,8,,,,,,8,8,8,8,8,8', '8,8,8,8,8,8,,8,8,8,,8,8,,8,8,8,,,,,,,,,,,,,,,,,,,,8,,,8,,,8,8,,,8,,8', ',,,8,,,,,,,,8,,,,,8,8,8,8,8,8,,,,8,8,,,,,,,8,,,8,8,8,,,8,8,114,114,114', '114,114,,,,114,114,,,,114,,114,114,114,114,114,114,114,,,,,,114,114', '114,114,114,114,114,,,114,,,,,,114,114,114,114,114,114,114,114,114,114', '114,114,,114,114,114,,114,114,,114,114,114,,,,,,,,,,,,,,,,,,,,114,,', '114,,,114,114,,,114,,114,,,,114,,,,,,,,114,,,,,114,114,114,114,114,114', ',,,114,114,,,,,,114,114,,,114,114,114,,,114,114,119,119,119,,119,,,', '119,119,,,,119,,119,119,119,119,119,119,119,,,,,,119,119,119,119,119', '119,119,,,119,,,,,,,119,,,119,119,119,119,119,119,119,119,,119,119,119', ',119,119,,119,119,119,,,,,,,,,,,,,,,,,,,,119,,,119,,,119,119,,,119,', ',,,,119,,,,,,,,119,,,,,119,119,119,119,119,119,,,,119,119,,,,,,,119', ',,119,119,119,,,119,119,120,120,120,,120,,,,120,120,,,,120,,120,120', '120,120,120,120,120,,,,,,120,120,120,120,120,120,120,,,120,,,,,,,120', ',,120,120,120,120,120,120,120,120,,120,120,120,,120,120,,120,120,120', ',,,,,,,,,,,,,,,,,,,120,,,120,,,120,120,,,120,,,,,,120,,,,,,,,120,,,', ',120,120,120,120,120,120,,,,120,120,,,,,,,120,,,120,120,120,,,120,120', '121,121,121,,121,,,,121,121,,,,121,,121,121,121,121,121,121,121,,,,', ',121,121,121,121,121,121,121,,,121,,,,,,,121,,,121,121,121,121,121,121', '121,121,,121,121,121,,121,121,,121,121,121,,,,,,,,,,,,,,,,,,,,121,,', '121,,,121,121,,,121,,,,,,121,,,,,,,,121,,,,,121,121,121,121,121,121', ',,,121,121,,,,,,,121,,,121,121,121,,,121,121,122,122,122,,122,,,,122', '122,,,,122,,122,122,122,122,122,122,122,,,,,,122,122,122,122,122,122', '122,,,122,,,,,,,122,,,122,122,122,122,122,122,122,122,,122,122,122,', '122,122,,122,122,122,,,,,,,,,,,,,,,,,,,,122,,,122,,,122,122,,,122,,', ',,,122,,,,,,,,122,,,,,122,122,122,122,122,122,,,,122,122,,,,,,,122,', ',122,122,122,,,122,122,123,123,123,123,123,,,,123,123,,,,123,,123,123', '123,123,123,123,123,,,,,,123,123,123,123,123,123,123,,,123,,,,,,123', '123,,123,123,123,123,123,123,123,123,123,,123,123,123,,123,123,,123', '123,123,,,,,,,,,,,,,,,,,,,,123,,,123,,,123,123,,,123,,123,,,,123,,,', ',,,,123,,,,,123,123,123,123,123,123,,,,123,123,,,,,,,123,,,123,123,123', ',,123,123,518,518,518,,518,,,,518,518,,,,518,,518,518,518,518,518,518', '518,,,,,,518,518,518,518,518,518,518,,,518,,,,,,,518,,,518,518,518,518', '518,518,518,518,,518,518,518,,518,518,,,,518,,,,,,,,,,,,,,,,,,,,518', ',,518,,,518,518,,,518,,,,,,,,,,,,,,,,,,,518,518,518,518,518,518,,,,518', '518,,,,,,,518,,,518,518,518,,,518,518,511,511,511,511,511,,,,511,511', ',,,511,,511,511,511,511,511,511,511,,,,,,511,511,511,511,511,511,511', ',,511,,,,,,511,511,,511,511,511,511,511,511,511,511,511,,511,511,511', ',511,511,,511,511,511,,,,,,,,,,,,,,,,,,,,511,,,511,,,511,511,,,511,', '511,,,,511,,,,,,,,511,,,,,511,511,511,511,511,511,,,,511,511,,,,,,511', '511,,,511,511,511,,,511,511,508,508,508,,508,,,,508,508,,,,508,,508', '508,508,508,508,508,508,,,,,,508,508,508,508,508,508,508,,,508,,,,,', ',508,,,508,508,508,508,508,508,508,508,,508,508,508,,508,508,,508,508', '508,,,,,,,,,,,,,,,,,,,,508,,,508,,,508,508,,,508,,,,,,508,,,,,,,,508', ',,,,508,508,508,508,508,508,,,,508,508,,,,,,,508,,,508,508,508,,,508', '508,504,504,504,,504,,,,504,504,,,,504,,504,504,504,504,504,504,504', ',,,,,504,504,504,504,504,504,504,,,504,,,,,,,504,,,504,504,504,504,504', '504,504,504,,504,504,504,,504,504,,504,504,504,,,,,,,,,,,,,,,,,,,,504', ',,504,,,504,504,,,504,,,,,,504,,,,,,,,504,,,,,504,504,504,504,504,504', ',,,504,504,,,,,,,504,,,504,504,504,,,504,504,210,210,210,,210,,,,210', '210,,,,210,,210,210,210,210,210,210,210,,,,,,210,210,210,210,210,210', '210,,,210,,,,,,,210,,,210,210,210,210,210,210,210,210,,210,210,210,', '210,210,,210,210,210,,,,,,,,,,,,,,,,,,,,210,,,210,,,210,210,,,210,,210', ',,,210,,,,,,,,210,,,,,210,210,210,210,210,210,,,,210,210,,,,,,,210,', ',210,210,210,,,210,210,211,211,211,,211,,,,211,211,,,,211,,211,211,211', '211,211,211,211,,,,,,211,211,211,211,211,211,211,,,211,,,,,,,211,,,211', '211,211,211,211,211,211,211,,211,211,211,,211,211,,211,211,211,,,,,', ',,,,,,,,,,,,,,211,,,211,,,211,211,,,211,,,,,,211,,,,,,,,211,,,,,211', '211,211,211,211,211,,,,211,211,,,,,,,211,,,211,211,211,,,211,211,212', '212,212,,212,,,,212,212,,,,212,,212,212,212,212,212,212,212,,,,,,212', '212,212,212,212,212,212,,,212,,,,,,,212,,,212,212,212,212,212,212,212', '212,212,212,212,212,,212,212,,212,212,212,,,,,,,,,,,,,,,,,,,,212,,,212', ',,212,212,,,212,,212,,212,,212,,,,,,,,212,,,,,212,212,212,212,212,212', ',,,212,212,,,,,,,212,,212,212,212,212,,,212,212,502,502,502,,502,,,', '502,502,,,,502,,502,502,502,502,502,502,502,,,,,,502,502,502,502,502', '502,502,,,502,,,,,,,502,,,502,502,502,502,502,502,502,502,502,502,502', '502,,502,502,,502,502,502,,,,,,,,,,,,,,,,,,,,502,,,502,,,502,502,,,502', ',,,502,,502,,,,,,,,502,,,,,502,502,502,502,502,502,,,,502,502,,,,,,', '502,,502,502,502,502,,,502,502,807,807,807,,807,,,,807,807,,,,807,,807', '807,807,807,807,807,807,,,,,,807,807,807,807,807,807,807,,,807,,,,,', ',807,,,807,807,807,807,807,807,807,807,,807,807,807,,807,807,,,,807', ',,,,,,,,,,,,,,,,,,,807,,,807,,,807,807,,,807,,,,,,,,,,,,,,,,,,,807,807', '807,807,807,807,,,,807,807,,,,,,,807,,,807,807,807,,,807,807,216,216', '216,,216,,,,216,216,,,,216,,216,216,216,216,216,216,216,,,,,,216,216', '216,216,216,216,216,,,216,,,,,,,216,,,216,216,216,216,216,216,216,216', ',216,216,216,,216,216,,216,216,216,,,,,,,,,,,,,,,,,,,,216,,,216,,,216', '216,,,216,,,,,,216,,,,,,,,216,,,,,216,216,216,216,216,216,,,,216,216', ',,,,,,216,,,216,216,216,,,216,216,217,217,217,,217,,,,217,217,,,,217', ',217,217,217,217,217,217,217,,,,,,217,217,217,217,217,217,217,,,217', ',,,,,,217,,,217,217,217,217,217,217,217,217,,217,217,217,,217,217,,217', '217,217,,,,,,,,,,,,,,,,,,,,217,,,217,,,217,217,,,217,,217,,,,217,,,', ',,,,217,,,,,217,217,217,217,217,217,,,,217,217,,,,,,,217,,,217,217,217', ',,217,217,218,218,218,,218,,,,218,218,,,,218,,218,218,218,218,218,218', '218,,,,,,218,218,218,218,218,218,218,,,218,,,,,,,218,,,218,218,218,218', '218,218,218,218,,218,218,218,,218,218,,218,218,218,,,,,,,,,,,,,,,,,', ',,218,,,218,,,218,218,,,218,,,,,,218,,,,,,,,218,,,,,218,218,218,218', '218,218,,,,218,218,,,,,,,218,,,218,218,218,,,218,218,219,219,219,,219', ',,,219,219,,,,219,,219,219,219,219,219,219,219,,,,,,219,219,219,219', '219,219,219,,,219,,,,,,,219,,,219,219,219,219,219,219,219,219,,219,219', '219,,219,219,,219,219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,219,,,219', ',,,,,219,,,,,,,,219,,,,,219,219,219,219,219,219,,,,219,219,,,,,,,219', ',,219,219,219,,,219,219,220,220,220,,220,,,,220,220,,,,220,,220,220', '220,220,220,220,220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220', ',,220,220,220,220,220,220,220,220,,220,220,220,,220,220,,220,220,220', ',,,,,,,,,,,,,,,,,,,220,,,220,,,220,220,,,220,,,,,,220,,,,,,,,220,,,', ',220,220,220,220,220,220,,,,220,220,,,,,,,220,,,220,220,220,,,220,220', '221,221,221,,221,,,,221,221,,,,221,,221,221,221,221,221,221,221,,,,', ',221,221,221,221,221,221,221,,,221,,,,,,,221,,,221,221,221,221,221,221', '221,221,,221,221,221,,221,221,,221,221,221,,,,,,,,,,,,,,,,,,,,221,,', '221,,,221,221,,,221,,,,,,221,,,,,,,,221,,,,,221,221,221,221,221,221', ',,,221,221,221,,,,,,221,,,221,221,221,,,221,221,47,47,47,,47,,,,47,47', ',,,47,,47,47,47,47,47,47,47,,,,,,47,47,47,47,47,47,47,,,47,,,,,,,47', ',,47,47,47,47,47,47,47,47,,47,47,47,,47,47,,47,47,47,,,,,,,,,,,,,,,', ',,,,47,,,47,,,47,47,,,47,,,,,,47,,,,,,,,47,,,,,47,47,47,47,47,47,,,', '47,47,,,,,,,47,,,47,47,47,,,47,47,793,793,793,,793,,,,793,793,,,,793', ',793,793,793,793,793,793,793,,,,,,793,793,793,793,793,793,793,,,793', ',,,,,,793,,,793,793,793,793,793,793,793,793,,793,793,793,,793,793,,793', '793,793,,,,,,,,,,,,,,,,,,,,793,,,793,,,793,793,,,793,,,,,,793,,,,,,', ',793,,,,,793,793,793,793,793,793,,,,793,793,,,,,,,793,,,793,793,793', ',,793,793,792,792,792,,792,,,,792,792,,,,792,,792,792,792,792,792,792', '792,,,,,,792,792,792,792,792,792,792,,,792,,,,,,,792,,,792,792,792,792', '792,792,792,792,,792,792,792,,792,792,,792,792,792,,,,,,,,,,,,,,,,,', ',,792,,,792,,,792,792,,,792,,,,,,792,,,,,,,,792,,,,,792,792,792,792', '792,792,,,,792,792,,,,,,,792,,,792,792,792,,,792,792,791,791,791,,791', ',,,791,791,,,,791,,791,791,791,791,791,791,791,,,,,,791,791,791,791', '791,791,791,,,791,,,,,,,791,,,791,791,791,791,791,791,791,791,,791,791', '791,,791,791,,791,791,791,,,,,,,,,,,,,,,,,,,,791,,,791,,,791,791,,,791', ',,,,,791,,,,,,,,791,,,,,791,791,791,791,791,791,,,,791,791,,,,,,,791', ',,791,791,791,,,791,791,790,790,790,,790,,,,790,790,,,,790,,790,790', '790,790,790,790,790,,,,,,790,790,790,790,790,790,790,,,790,,,,,,,790', ',,790,790,790,790,790,790,790,790,,790,790,790,,790,790,,790,790,790', ',,,,,,,,,,,,,,,,,,,790,,,790,,,790,790,,,790,,,,,,790,,,,,,,,790,,,', ',790,790,790,790,790,790,,,,790,790,,,,,,,790,,,790,790,790,,,790,790', '776,776,776,,776,,,,776,776,,,,776,,776,776,776,776,776,776,776,,,,', ',776,776,776,776,776,776,776,,,776,,,,,,,776,,,776,776,776,776,776,776', '776,776,,776,776,776,,776,776,,776,776,776,,,,,,,,,,,,,,,,,,,,776,,', '776,,,776,776,,,776,,,,,,776,,,,,,,,776,,,,,776,776,776,776,776,776', ',,,776,776,,,,,,,776,,,776,776,776,,,776,776,774,774,774,,774,,,,774', '774,,,,774,,774,774,774,774,774,774,774,,,,,,774,774,774,774,774,774', '774,,,774,,,,,,,774,,,774,774,774,774,774,774,774,774,,774,774,774,', '774,774,,774,774,774,,,,,,,,,,,,,,,,,,,,774,,,774,,,774,774,,,774,,', ',,,774,,,,,,,,774,,,,,774,774,774,774,774,774,,,,774,774,,,,,,,774,', ',774,774,774,,,774,774,232,232,232,,232,,,,232,232,,,,232,,232,232,232', '232,232,232,232,,,,,,232,232,232,232,232,232,232,,,232,,,,,,,232,,,232', '232,232,232,232,232,232,232,,232,232,232,,232,232,,232,232,232,,,,,', ',,,,,,,,,,,,,,232,,,232,,,232,232,,,232,,,,,,232,,,,,,,,232,,,,,232', '232,232,232,232,232,,,,232,232,,,,,,,232,,,232,232,232,,,232,232,499', '499,499,,499,,,,499,499,,,,499,,499,499,499,499,499,499,499,,,,,,499', '499,499,499,499,499,499,,,499,,,,,,,499,,,499,499,499,499,499,499,499', '499,499,499,499,499,,499,499,,499,499,499,,,,,,,,,,,,,,,,,,,,499,,,499', ',,499,499,,,499,,499,,499,,499,,,,,,,,499,,,,,499,499,499,499,499,499', ',,,499,499,,,,,,,499,,499,499,499,499,,,499,499,235,235,235,,235,,,', '235,235,,,,235,,235,235,235,235,235,235,235,,,,,,235,235,235,235,235', '235,235,,,235,,,,,,,235,,,235,235,235,235,235,235,235,235,,235,235,235', ',235,235,,235,235,235,,,,,,,,,,,,,,,,,,,,235,,,235,,,235,235,,,235,', ',,,,235,,,,,,,,235,,,,,235,235,235,235,235,235,,,,235,235,,,,,,,235', ',,235,235,235,,,235,235,236,236,236,,236,,,,236,236,,,,236,,236,236', '236,236,236,236,236,,,,,,236,236,236,236,236,236,236,,,236,,,,,,,236', ',,236,236,236,236,236,236,236,236,,236,236,236,,236,236,,236,236,236', ',,,,,,,,,,,,,,,,,,,236,,,236,,,236,236,,,236,,,,,,236,,,,,,,,236,,,', ',236,236,236,236,236,236,,,,236,236,,,,,,,236,,,236,236,236,,,236,236', '237,237,237,,237,,,,237,237,,,,237,,237,237,237,237,237,237,237,,,,', ',237,237,237,237,237,237,237,,,237,,,,,,,237,,,237,237,237,237,237,237', '237,237,,237,237,237,,237,237,,237,237,237,,,,,,,,,,,,,,,,,,,,237,,', '237,,,237,237,,,237,,,,,,237,,,,,,,,237,,,,,237,237,237,237,237,237', ',,,237,237,,,,,,,237,,,237,237,237,,,237,237,238,238,238,,238,,,,238', '238,,,,238,,238,238,238,238,238,238,238,,,,,,238,238,238,238,238,238', '238,,,238,,,,,,,238,,,238,238,238,238,238,238,238,238,,238,238,238,', '238,238,,238,238,238,,,,,,,,,,,,,,,,,,,,238,,,238,,,238,238,,,238,,', ',,,238,,,,,,,,238,,,,,238,238,238,238,238,238,,,,238,238,,,,,,,238,', ',238,238,238,,,238,238,239,239,239,,239,,,,239,239,,,,239,,239,239,239', '239,239,239,239,,,,,,239,239,239,239,239,239,239,,,239,,,,,,,239,,,239', '239,239,239,239,239,239,239,,239,239,239,,239,239,,239,239,239,,,,,', ',,,,,,,,,,,,,,239,,,239,,,239,239,,,239,,,,,,239,,,,,,,,239,,,,,239', '239,239,239,239,239,,,,239,239,,,,,,,239,,,239,239,239,,,239,239,240', '240,240,,240,,,,240,240,,,,240,,240,240,240,240,240,240,240,,,,,,240', '240,240,240,240,240,240,,,240,,,,,,,240,,,240,240,240,240,240,240,240', '240,,240,240,240,,240,240,,240,240,240,,,,,,,,,,,,,,,,,,,,240,,,240', ',,240,240,,,240,,,,,,240,,,,,,,,240,,,,,240,240,240,240,240,240,,,,240', '240,,,,,,,240,,,240,240,240,,,240,240,241,241,241,,241,,,,241,241,,', ',241,,241,241,241,241,241,241,241,,,,,,241,241,241,241,241,241,241,', ',241,,,,,,,241,,,241,241,241,241,241,241,241,241,,241,241,241,,241,241', ',241,241,241,,,,,,,,,,,,,,,,,,,,241,,,241,,,241,241,,,241,,,,,,241,', ',,,,,,241,,,,,241,241,241,241,241,241,,,,241,241,,,,,,,241,,,241,241', '241,,,241,241,242,242,242,,242,,,,242,242,,,,242,,242,242,242,242,242', '242,242,,,,,,242,242,242,242,242,242,242,,,242,,,,,,,242,,,242,242,242', '242,242,242,242,242,,242,242,242,,242,242,,242,242,242,,,,,,,,,,,,,', ',,,,,,242,,,242,,,242,242,,,242,,,,,,242,,,,,,,,242,,,,,242,242,242', '242,242,242,,,,242,242,,,,,,,242,,,242,242,242,,,242,242,243,243,243', ',243,,,,243,243,,,,243,,243,243,243,243,243,243,243,,,,,,243,243,243', '243,243,243,243,,,243,,,,,,,243,,,243,243,243,243,243,243,243,243,,243', '243,243,,243,243,,243,243,243,,,,,,,,,,,,,,,,,,,,243,,,243,,,243,243', ',,243,,,,,,243,,,,,,,,243,,,,,243,243,243,243,243,243,,,,243,243,,,', ',,,243,,,243,243,243,,,243,243,244,244,244,,244,,,,244,244,,,,244,,244', '244,244,244,244,244,244,,,,,,244,244,244,244,244,244,244,,,244,,,,,', ',244,,,244,244,244,244,244,244,244,244,,244,244,244,,244,244,,244,244', '244,,,,,,,,,,,,,,,,,,,,244,,,244,,,244,244,,,244,,,,,,244,,,,,,,,244', ',,,,244,244,244,244,244,244,,,,244,244,,,,,,,244,,,244,244,244,,,244', '244,245,245,245,,245,,,,245,245,,,,245,,245,245,245,245,245,245,245', ',,,,,245,245,245,245,245,245,245,,,245,,,,,,,245,,,245,245,245,245,245', '245,245,245,,245,245,245,,245,245,,245,245,245,,,,,,,,,,,,,,,,,,,,245', ',,245,,,245,245,,,245,,,,,,245,,,,,,,,245,,,,,245,245,245,245,245,245', ',,,245,245,,,,,,,245,,,245,245,245,,,245,245,246,246,246,,246,,,,246', '246,,,,246,,246,246,246,246,246,246,246,,,,,,246,246,246,246,246,246', '246,,,246,,,,,,,246,,,246,246,246,246,246,246,246,246,,246,246,246,', '246,246,,246,246,246,,,,,,,,,,,,,,,,,,,,246,,,246,,,246,246,,,246,,', ',,,246,,,,,,,,246,,,,,246,246,246,246,246,246,,,,246,246,,,,,,,246,', ',246,246,246,,,246,246,247,247,247,,247,,,,247,247,,,,247,,247,247,247', '247,247,247,247,,,,,,247,247,247,247,247,247,247,,,247,,,,,,,247,,,247', '247,247,247,247,247,247,247,,247,247,247,,247,247,,247,247,247,,,,,', ',,,,,,,,,,,,,,247,,,247,,,247,247,,,247,,,,,,247,,,,,,,,247,,,,,247', '247,247,247,247,247,,,,247,247,,,,,,,247,,,247,247,247,,,247,247,248', '248,248,,248,,,,248,248,,,,248,,248,248,248,248,248,248,248,,,,,,248', '248,248,248,248,248,248,,,248,,,,,,,248,,,248,248,248,248,248,248,248', '248,,248,248,248,,248,248,,248,248,248,,,,,,,,,,,,,,,,,,,,248,,,248', ',,248,248,,,248,,,,,,248,,,,,,,,248,,,,,248,248,248,248,248,248,,,,248', '248,,,,,,,248,,,248,248,248,,,248,248,249,249,249,,249,,,,249,249,,', ',249,,249,249,249,249,249,249,249,,,,,,249,249,249,249,249,249,249,', ',249,,,,,,,249,,,249,249,249,249,249,249,249,249,,249,249,249,,249,249', ',249,249,249,,,,,,,,,,,,,,,,,,,,249,,,249,,,249,249,,,249,,,,,,249,', ',,,,,,249,,,,,249,249,249,249,249,249,,,,249,249,,,,,,,249,,,249,249', '249,,,249,249,250,250,250,,250,,,,250,250,,,,250,,250,250,250,250,250', '250,250,,,,,,250,250,250,250,250,250,250,,,250,,,,,,,250,,,250,250,250', '250,250,250,250,250,,250,250,250,,250,250,,250,250,250,,,,,,,,,,,,,', ',,,,,,250,,,250,,,250,250,,,250,,,,,,250,,,,,,,,250,,,,,250,250,250', '250,250,250,,,,250,250,,,,,,,250,,,250,250,250,,,250,250,251,251,251', ',251,,,,251,251,,,,251,,251,251,251,251,251,251,251,,,,,,251,251,251', '251,251,251,251,,,251,,,,,,,251,,,251,251,251,251,251,251,251,251,,251', '251,251,,251,251,,251,251,251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251,251', ',,251,,,,,,251,,,,,,,,251,,,,,251,251,251,251,251,251,,,,251,251,,,', ',,,251,,,251,251,251,,,251,251,252,252,252,,252,,,,252,252,,,,252,,252', '252,252,252,252,252,252,,,,,,252,252,252,252,252,252,252,,,252,,,,,', ',252,,,252,252,252,252,252,252,252,252,,252,252,252,,252,252,,252,252', '252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252,,,252,,,,,,252,,,,,,,,252', ',,,,252,252,252,252,252,252,,,,252,252,,,,,,,252,,,252,252,252,,,252', '252,253,253,253,,253,,,,253,253,,,,253,,253,253,253,253,253,253,253', ',,,,,253,253,253,253,253,253,253,,,253,,,,,,,253,,,253,253,253,253,253', '253,253,253,,253,253,253,,253,253,,253,253,253,,,,,,,,,,,,,,,,,,,,253', ',,253,,,253,253,,,253,,,,,,253,,,,,,,,253,,,,,253,253,253,253,253,253', ',,,253,253,,,,,,,253,,,253,253,253,,,253,253,254,254,254,,254,,,,254', '254,,,,254,,254,254,254,254,254,254,254,,,,,,254,254,254,254,254,254', '254,,,254,,,,,,,254,,,254,254,254,254,254,254,254,254,,254,254,254,', '254,254,,254,254,254,,,,,,,,,,,,,,,,,,,,254,,,254,,,254,254,,,254,,', ',,,254,,,,,,,,254,,,,,254,254,254,254,254,254,,,,254,254,,,,,,,254,', ',254,254,254,,,254,254,255,255,255,,255,,,,255,255,,,,255,,255,255,255', '255,255,255,255,,,,,,255,255,255,255,255,255,255,,,255,,,,,,,255,,,255', '255,255,255,255,255,255,255,,255,255,255,,255,255,,255,255,255,,,,,', ',,,,,,,,,,,,,,255,,,255,,,255,255,,,255,,,,,,255,,,,,,,,255,,,,,255', '255,255,255,255,255,,,,255,255,,,,,,,255,,,255,255,255,,,255,255,256', '256,256,,256,,,,256,256,,,,256,,256,256,256,256,256,256,256,,,,,,256', '256,256,256,256,256,256,,,256,,,,,,,256,,,256,256,256,256,256,256,256', '256,,256,256,256,,256,256,,256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256', ',,256,256,,,256,,,,,,256,,,,,,,,256,,,,,256,256,256,256,256,256,,,,256', '256,,,,,,,256,,,256,256,256,,,256,256,257,257,257,,257,,,,257,257,,', ',257,,257,257,257,257,257,257,257,,,,,,257,257,257,257,257,257,257,', ',257,,,,,,,257,,,257,257,257,257,257,257,257,257,,257,257,257,,257,257', ',257,257,257,,,,,,,,,,,,,,,,,,,,257,,,257,,,257,257,,,257,,,,,,257,', ',,,,,,257,,,,,257,257,257,257,257,257,,,,257,257,,,,,,,257,,,257,257', '257,,,257,257,258,258,258,,258,,,,258,258,,,,258,,258,258,258,258,258', '258,258,,,,,,258,258,258,258,258,258,258,,,258,,,,,,,258,,,258,258,258', '258,258,258,258,258,,258,258,258,,258,258,,258,258,258,,,,,,,,,,,,,', ',,,,,,258,,,258,,,258,258,,,258,,,,,,258,,,,,,,,258,,,,,258,258,258', '258,258,258,,,,258,258,,,,,,,258,,,258,258,258,,,258,258,259,259,259', ',259,,,,259,259,,,,259,,259,259,259,259,259,259,259,,,,,,259,259,259', '259,259,259,259,,,259,,,,,,,259,,,259,259,259,259,259,259,259,259,,259', '259,259,,259,259,,259,259,259,,,,,,,,,,,,,,,,,,,,259,,,259,,,259,259', ',,259,,,,,,259,,,,,,,,259,,,,,259,259,259,259,259,259,,,,259,259,,,', ',,,259,,,259,259,259,,,259,259,260,260,260,,260,,,,260,260,,,,260,,260', '260,260,260,260,260,260,,,,,,260,260,260,260,260,260,260,,,260,,,,,', ',260,,,260,260,260,260,260,260,260,260,,260,260,260,,260,260,,260,260', '260,,,,,,,,,,,,,,,,,,,,260,,,260,,,260,260,,,260,,,,,,260,,,,,,,,260', ',,,,260,260,260,260,260,260,,,,260,260,,,,,,,260,,,260,260,260,,,260', '260,267,267,267,,267,,,,267,267,,,,267,,267,267,267,267,267,267,267', ',,,,,267,267,267,267,267,267,267,,,267,,,,,,,267,,,267,267,267,267,267', '267,267,267,267,267,267,267,,267,267,,267,267,267,,,,,,,,,,,,,,,,,,', ',267,,,267,,,267,267,,,267,,267,,267,,267,,,,,,,,267,,,,,267,267,267', '267,267,267,,,,267,267,,,,,,,267,,267,267,267,267,,,267,267,458,458', '458,,458,,,,458,458,,,,458,,458,458,458,458,458,458,458,,,,,,458,458', '458,458,458,458,458,,,458,,,,,,,458,,,458,458,458,458,458,458,458,458', ',458,458,458,,458,458,,458,458,458,,,,,,,,,,,,,,,,,,,,458,,,458,,,458', '458,,,458,,,,,,458,,,,,,,,458,,,,,458,458,458,458,458,458,,,,458,458', ',,,,,,458,,,458,458,458,,,458,458,273,273,273,,273,,,,273,273,,,,273', ',273,273,273,273,273,273,273,,,,,,273,273,273,273,273,273,273,,,273', ',,,,,,273,,,273,273,273,273,273,273,273,273,273,273,273,273,,273,273', ',273,273,273,,,,,,,,,,,,,,,,,,,,273,,,273,,,273,273,,,273,,273,,273', ',273,,,,,,,,273,,,,,273,273,273,273,273,273,,,,273,273,,,,,,,273,,273', '273,273,273,,,273,273,276,276,276,,276,,,,276,276,,,,276,,276,276,276', '276,276,276,276,,,,,,276,276,276,276,276,276,276,,,276,,,,,,,276,,,276', '276,276,276,276,276,276,276,276,276,276,276,,276,276,,276,276,276,,', ',,,,,,,,,,,,,,,,,276,,,276,,,276,276,,,276,,276,,276,,276,,,,,,,,276', ',,,,276,276,276,276,276,276,,,,276,276,276,,,,,,276,,276,276,276,276', ',,276,276,457,457,457,,457,,,,457,457,,,,457,,457,457,457,457,457,457', '457,,,,,,457,457,457,457,457,457,457,,,457,,,,,,,457,,,457,457,457,457', '457,457,457,457,,457,457,457,,457,457,,457,457,457,,,,,,,,,,,,,,,,,', ',,457,,,457,,,457,457,,,457,,,,,,457,,,,,,,,457,,,,,457,457,457,457', '457,457,,,,457,457,,,,,,,457,,,457,457,457,,,457,457,752,752,752,,752', ',,,752,752,,,,752,,752,752,752,752,752,752,752,,,,,,752,752,752,752', '752,752,752,,,752,,,,,,,752,,,752,752,752,752,752,752,752,752,752,752', '752,752,,752,752,,752,752,752,,,,,,,,,,,,,,,,,,,,752,,,752,,,752,752', ',,752,,752,,752,,752,,,,,,,,752,,,,,752,752,752,752,752,752,,,,752,752', ',,,,,,752,,752,752,752,752,,,752,752,746,746,746,,746,,,,746,746,,,', '746,,746,746,746,746,746,746,746,,,,,,746,746,746,746,746,746,746,,', '746,,,,,,,746,,,746,746,746,746,746,746,746,746,,746,746,746,,746,746', ',746,746,746,,,,,,,,,,,,,,,,,,,,746,,,746,,,746,746,,,746,,,,,,746,', ',,,,,,746,,,,,746,746,746,746,746,746,,,,746,746,,,,,,,746,,,746,746', '746,,,746,746,283,283,283,,283,,,,283,283,,,,283,,283,283,283,283,283', '283,283,,,,,,283,283,283,283,283,283,283,,,283,,,,,,,283,,,283,283,283', '283,283,283,283,283,,283,283,283,,283,283,,283,283,283,,,,,,,,,,,,,', ',,,,,,283,,,283,,,283,283,,,283,,,,,,283,,,,,,,,283,,,,,283,283,283', '283,283,283,,,,283,283,,,,,,,283,,,283,283,283,,,283,283,285,285,285', ',285,,,,285,285,,,,285,,285,285,285,285,285,285,285,,,,,,285,285,285', '285,285,285,285,,,285,,,,,,,285,,,285,285,285,285,285,285,285,285,,285', '285,285,,285,285,,285,285,285,,,,,,,,,,,,,,,,,,,,285,,,285,,,285,285', ',,285,,,,,,285,,,,,,,,285,,,,,285,285,285,285,285,285,,,,285,285,,,', ',,,285,,,285,285,285,,,285,285,287,287,287,,287,,,,287,287,,,,287,,287', '287,287,287,287,287,287,,,,,,287,287,287,287,287,287,287,,,287,,,,,', ',287,,,287,287,287,287,287,287,287,287,,287,287,287,,287,287,,287,287', '287,,,,,,,,,,,,,,,,,,,,287,,,287,,,287,287,,,287,,,,,,287,,,,,,,,287', ',,,,287,287,287,287,287,287,,,,287,287,,,,,,,287,,,287,287,287,,,287', '287,290,290,290,,290,,,,290,290,,,,290,,290,290,290,290,290,290,290', ',,,,,290,290,290,290,290,290,290,,,290,,,,,,,290,,,290,290,290,290,290', '290,290,290,,290,290,290,,290,290,,290,290,290,,,,,,,,,,,,,,,,,,,,290', ',,290,,,290,290,,,290,,,,,,290,,,,,,,,290,,,,,290,290,290,290,290,290', ',,,290,290,,,,,,,290,,,290,290,290,,,290,290,296,296,296,296,296,,,', '296,296,,,,296,,296,296,296,296,296,296,296,,,,,,296,296,296,296,296', '296,296,,,296,,,,,,296,296,,296,296,296,296,296,296,296,296,296,,296', '296,296,,296,296,,296,296,296,,,,,,,,,,,,,,,,,,,,296,,,296,,,296,296', ',,296,,296,,,,296,,,,,,,,296,,,,,296,296,296,296,296,296,,,,296,296', ',,,,,,296,,,296,296,296,,,296,296,740,740,740,,740,,,,740,740,,,,740', ',740,740,740,740,740,740,740,,,,,,740,740,740,740,740,740,740,,,740', ',,,,,,740,,,740,740,740,740,740,740,740,740,,740,740,740,,740,740,,740', '740,740,,,,,,,,,,,,,,,,,,,,740,,,740,,,740,740,,,740,,740,,,,740,,,', ',,,,740,,,,,740,740,740,740,740,740,,,,740,740,,,,,,,740,,,740,740,740', ',,740,740,456,456,456,,456,,,,456,456,,,,456,,456,456,456,456,456,456', '456,,,,,,456,456,456,456,456,456,456,,,456,,,,,,,456,,,456,456,456,456', '456,456,456,456,,456,456,456,,456,456,,456,456,456,,,,,,,,,,,,,,,,,', ',,456,,,456,,,456,456,,,456,,,,,,456,,,,,,,,456,,,,,456,456,456,456', '456,456,,,,456,456,,,,,,,456,,,456,456,456,,,456,456,720,720,720,,720', ',,,720,720,,,,720,,720,720,720,720,720,720,720,,,,,,720,720,720,720', '720,720,720,,,720,,,,,,,720,,,720,720,720,720,720,720,720,720,,720,720', '720,,720,720,,720,720,720,,,,,,,,,,,,,,,,,,,,720,,,720,,,720,720,,,720', ',,,,,720,,,,,,,,720,,,,,720,720,720,720,720,720,,,,720,720,,,,,,,720', ',,720,720,720,,,720,720,302,302,302,,302,,,,302,302,,,,302,,302,302', '302,302,302,302,302,,,,,,302,302,302,302,302,302,302,,,302,,,,,,,302', ',,302,302,302,302,302,302,302,302,,302,302,302,,302,302,,,,302,,,,,', ',,,,,,,,,,,,,,302,,,302,,,302,302,,,302,,,,,,,,,,,,,,,,,,,302,302,302', '302,302,302,,,,302,302,,,,302,,,302,,,302,302,302,,,302,302,454,454', '454,,454,,,,454,454,,,,454,,454,454,454,454,454,454,454,,,,,,454,454', '454,454,454,454,454,,,454,,,,,,,454,,,454,454,454,454,454,454,454,454', '454,454,454,454,,454,454,,454,454,454,,,,,,,,,,,,,,,,,,,,454,,,454,', ',454,454,,,454,,454,,454,,454,,,,,,,,454,,,,,454,454,454,454,454,454', ',,,454,454,,,,,,,454,,454,454,454,454,,,454,454,700,700,700,,700,,,', '700,700,,,,700,,700,700,700,700,700,700,700,,,,,,700,700,700,700,700', '700,700,,,700,,,,,,,700,,,700,700,700,700,700,700,700,700,,700,700,700', ',700,700,,700,700,700,,,,,,,,,,,,,,,,,,,,700,,,700,,,700,700,,,700,', '700,,,,700,,,,,,,,700,,,,,700,700,700,700,700,700,,,,700,700,,,,,,,700', ',,700,700,700,,,700,700,695,695,695,,695,,,,695,695,,,,695,,695,695', '695,695,695,695,695,,,,,,695,695,695,695,695,695,695,,,695,,,,,,,695', ',,695,695,695,695,695,695,695,695,,695,695,695,,695,695,,,,695,,,,,', ',,,,,,,,,,,,,,695,,,695,,,695,695,,,695,,,,,,,,,,,,,,,,,,,695,695,695', '695,695,695,,,,695,695,,,,,,,695,,,695,695,695,,,695,695,684,684,684', ',684,,,,684,684,,,,684,,684,684,684,684,684,684,684,,,,,,684,684,684', '684,684,684,684,,,684,,,,,,,684,,,684,684,684,684,684,684,684,684,,684', '684,684,,684,684,,,,684,,,,,,,,,,,,,,,,,,,,684,,,684,,,684,684,,,684', ',,,,,,,,,,,,,,,,,,684,684,684,684,684,684,,,,684,684,,,,,,,684,,,684', '684,684,,,684,684,680,680,680,,680,,,,680,680,,,,680,,680,680,680,680', '680,680,680,,,,,,680,680,680,680,680,680,680,,,680,,,,,,,680,,,680,680', '680,680,680,680,680,680,,680,680,680,,680,680,,680,680,680,,,,,,,,,', ',,,,,,,,,,680,,,680,,,680,680,,,680,,,,,,680,,,,,,,,680,,,,,680,680', '680,680,680,680,,,,680,680,,,,,,,680,,,680,680,680,59,,680,680,,,,59', '59,59,,,59,59,59,949,59,949,949,949,949,949,,,,,59,59,59,,,949,,,,,59', '59,,59,59,59,59,59,,,,,,,,,,949,949,,,,,,,,949,949,949,949,,59,59,59', '59,59,59,59,59,59,59,59,59,59,59,,,59,59,59,,,59,,,59,,,59,59,,59,949', '59,,59,,59,59,59,59,59,59,59,,59,,59,,,,,,,,,,,,,59,59,59,59,437,59', ',59,,,,437,437,437,,,437,437,437,926,437,926,926,926,926,926,,,,437', '437,437,437,,,926,,,,,437,437,,437,437,437,437,437,,,,,,,,,,926,,,,', ',,,,,,926,926,,437,437,437,437,437,437,437,437,437,437,437,437,437,437', ',,437,437,437,,,437,,,437,,,437,437,,437,926,437,,437,,437,437,437,437', '437,437,437,,437,437,437,,,,,,,,,,,,,437,437,437,437,438,437,,437,,', ',438,438,438,,,438,438,438,924,438,924,924,924,924,924,,,,438,438,438', '438,,,924,,,,,438,438,,438,438,438,438,438,,,,,,,,,,924,,,,,,,,,,,924', '924,,438,438,438,438,438,438,438,438,438,438,438,438,438,438,,,438,438', '438,,,438,,,438,,,438,438,,438,924,438,,438,,438,438,438,438,438,438', '438,,438,438,438,,,,,,,,,,,,,438,438,438,438,,438,,438,91,91,91,91,91', '91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,,,,91,91,91', '91,91,91,91,91,91,91,,,,,,91,91,91,91,91,91,91,91,91,91,91,91,,91,,', ',,,,91,91,,91,91,91,91,91,91,91,,,91,91,,,,91,91,91,91,,,,,,,,,,,,,', '91,91,,91,91,91,91,91,91,91,91,91,91,91,,,91,,,,,,,,,,,,,,,,,,,,91,762', '762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762', '762,762,762,762,762,762,,,,762,762,762,762,762,762,762,762,762,762,', ',,,,762,762,762,762,762,762,762,762,762,,,762,,,,,,,,,762,762,,762,762', '762,762,762,762,762,,,762,762,,,,762,762,762,762,,,,,,,,,,,,,,762,762', ',762,762,762,762,762,762,762,762,762,762,762,,,762,,,,,,,,,,,,,,,,,', ',,762,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12', '12,12,12,,,,12,12,12,12,12,12,12,12,12,12,,,,,,12,12,12,12,12,12,12', '12,12,,,12,,,,,,,,,12,12,,12,12,12,12,12,12,12,,,12,12,,,,12,12,12,12', ',,,,,,,,,,,,,12,12,,12,12,12,12,12,12,12,12,12,12,12,,,12,12,,,,,,,', ',,12,,,,,,,,,12,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74', '74,74,74,74,74,74,,,,74,74,74,74,74,74,74,74,74,74,,,,,,74,74,74,74', '74,74,74,74,74,74,74,74,,74,,,,,,,74,74,,74,74,74,74,74,74,74,,,74,74', ',,,74,74,74,74,,,,,,74,,,,,,,,74,74,,74,74,74,74,74,74,74,74,74,74,74', ',,74,,,,,,,,,,,,,,,,,,,,74,407,407,407,407,407,407,407,407,407,407,407', '407,407,407,407,407,407,407,407,407,407,407,407,407,,,,407,407,407,407', '407,407,407,407,407,407,,,,,,407,407,407,407,407,407,407,407,407,,,407', ',,,,,,,,407,407,,407,407,407,407,407,407,407,,,407,407,,,,407,407,407', '407,,,,,,,,,,,,,,407,407,,407,407,407,407,407,407,407,407,407,407,407', ',,407,407,,,,,,,,,,407,,,,,,,,,407,633,633,633,633,633,633,633,633,633', '633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,,,,633,633', '633,633,633,633,633,633,633,633,,,,,,633,633,633,633,633,633,633,633', '633,,,633,,,,,,,,,633,633,,633,633,633,633,633,633,633,,,633,633,,,', '633,633,633,633,,,,,,,,,,,,,,633,633,,633,633,633,633,633,633,633,633', '633,633,633,,,633,633,,,,,,,,,,633,,,,,,,,,633,11,11,11,11,11,11,11', '11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,,,,11,11,11,11,11', '11,11,11,11,11,,,,,,11,11,11,11,11,11,11,11,11,11,,11,,,,,,,,,11,11', ',11,11,11,11,11,11,11,,,11,11,,,,11,11,11,11,,,,,,,,,,,,,,11,11,,11', '11,11,11,11,11,11,11,11,11,11,,,11,11,,,,428,,,,,,11,428,428,428,,,428', '428,428,11,428,,,,,,,,,428,428,428,,,,,,,,,428,428,,428,428,428,428', '428,,,,,,,,,,,,,,,,,,,,,,,,428,428,428,428,428,428,428,428,428,428,428', '428,428,428,,,428,428,428,,,428,,428,428,,,428,428,,428,,428,,428,,428', '428,428,428,428,428,428,,428,428,428,,,,,,,,,,,,486,428,428,,428,,428', '486,486,486,,,486,486,486,922,486,922,922,922,922,922,,,,486,486,,,', ',922,,,,,486,486,,486,486,486,486,486,,,897,,897,897,897,897,897,922', ',,,,,,,,897,,922,922,,31,,,,,,,31,31,31,,486,31,31,31,,31,897,486,,', ',,486,486,,31,31,897,897,,922,,,,,31,31,,31,31,31,31,31,,486,486,,,', ',,,,,,,,,486,,,897,,486,,,31,31,31,31,31,31,31,31,31,31,31,31,31,31', ',,31,31,31,,,31,,31,31,,,31,31,,31,,31,,31,,31,31,31,31,31,31,31,,31', ',31,,,,,,,,,,,,30,31,31,,31,,31,30,30,30,,,30,30,30,714,30,714,714,714', '714,714,,,,30,30,30,,,,714,,,,,30,30,,30,30,30,30,30,,,,,,,,,,714,,', ',,,,,,714,714,714,714,,30,30,30,30,30,30,30,30,30,30,30,30,30,30,,,30', '30,30,,,30,,30,30,,,30,30,,30,714,30,,30,,30,30,30,30,30,30,30,,30,30', '30,,,,,,214,214,,,214,,,30,30,,30,,30,214,214,,214,214,214,214,214,214', '214,,,214,214,,,,214,214,214,214,,,,,,214,,,,,,,,214,214,,214,214,214', '214,214,214,214,214,214,214,214,,,214,,,,,592,592,,,592,,,,,,,,,592', '592,214,592,592,592,592,592,592,592,,,592,592,,,,592,592,592,592,,,', ',,592,,,,,,,,592,592,,592,592,592,592,592,592,592,592,592,592,592,,', '592,,,,,593,593,,,593,,,,,,,,,593,593,592,593,593,593,593,593,593,593', ',,593,593,,,,593,593,593,593,,,,,,593,,,,,,,,593,593,,593,593,593,593', '593,593,593,593,593,593,593,,920,593,920,920,920,920,920,,,,,,,,,,920', ',,,,593,,,,,,,,,1018,,1018,1018,1018,1018,1018,,920,522,522,,,522,,', '1018,920,920,920,920,,522,522,,522,522,522,522,522,522,522,,,522,522', ',,1018,522,522,522,522,,,,,,522,1018,1018,,,920,,,522,522,,522,522,522', '522,522,522,522,522,522,522,522,,,522,,,,,521,521,,,521,,1018,,,,,,', '521,521,522,521,521,521,521,521,521,521,,,521,521,,,,521,521,521,521', ',,,,,521,,,,,,,,521,521,,521,521,521,521,521,521,521,521,521,521,521', ',,521,,,,,213,213,,,213,,,,,,,,,213,213,521,213,213,213,213,213,213', '213,,,213,213,,,,213,213,213,213,,,,,,213,,,,,,,,213,213,,213,213,213', '213,213,213,213,213,213,213,213,,664,213,664,664,664,664,664,,,,,,,', ',,664,,,,,213,,,,,,,,,,,,,,,,,664,453,453,,,453,,,,664,664,664,664,', '453,453,,453,453,453,453,453,453,453,,,453,453,,,,453,453,453,453,,', '664,,,453,,,,,664,,,453,453,,453,453,453,453,453,453,453,453,453,453', '453,,605,453,605,605,605,605,605,895,,895,895,895,895,895,,,605,,,,', '453,,895,892,,892,892,892,892,892,,,,,,,,605,605,892,,,,,895,,605,605', '605,605,,,,895,895,895,895,,,,,892,,1005,,1005,1005,1005,1005,1005,892', '892,892,892,,,,452,452,1005,,452,605,,,,,,,895,452,452,,452,452,452', '452,452,452,452,,1005,452,452,,,892,452,452,452,452,,1005,1005,,,452', ',,,,,,,452,452,,452,452,452,452,452,452,452,452,452,452,452,,760,452', '760,760,760,760,760,1005,,,,,,,,,760,,,,,452,,,,,,,,,1003,,1003,1003', '1003,1003,1003,,760,1016,1016,,,1016,,,1003,760,760,760,760,,1016,1016', ',1016,1016,1016,1016,1016,1016,1016,,,1016,1016,,,1003,1016,1016,1016', '1016,,,,,,1016,1003,1003,,,760,,,1016,1016,,1016,1016,1016,1016,1016', '1016,1016,1016,1016,1016,1016,,,1016,,,,,1015,1015,,,1015,,1003,,,,', ',,1015,1015,1016,1015,1015,1015,1015,1015,1015,1015,,,1015,1015,,,,1015', '1015,1015,1015,,,,,,1015,,,,,,,,1015,1015,,1015,1015,1015,1015,1015', '1015,1015,1015,1015,1015,1015,,,1015,,,,,263,263,,,263,,,,,,,,,263,263', '1015,263,263,263,263,263,263,263,,,263,263,,,,263,263,263,263,,,,,,', ',,,,,,,263,263,,263,263,263,263,263,263,263,263,263,263,263,,1001,263', '1001,1001,1001,1001,1001,999,,999,999,999,999,999,,,1001,,,,,263,,999', '550,,550,550,550,550,550,1049,,1049,1049,1049,1049,1049,1001,,550,,', ',,999,,1049,,1001,1001,,,,999,999,999,999,,,,,550,,,,,,,1049,,550,550', '550,550,,,,966,966,1049,1049,966,1001,,,,,,,999,966,966,,966,966,966', '966,966,966,966,,,966,966,,,550,966,966,966,966,,,1049,,,966,,,,,,,', '966,966,,966,966,966,966,966,966,966,966,966,966,966,,718,966,718,718', '718,718,718,,,750,750,,,750,,,718,,,,,966,750,750,,750,750,750,750,750', '750,750,,,750,750,,,718,750,750,750,750,,,,,,750,718,718,,,,,,750,750', ',750,750,750,750,750,750,750,750,750,750,750,,,750,,,,,751,751,,,751', ',718,,,,,,,751,751,750,751,751,751,751,751,751,751,,,751,751,,,,751', '751,751,751,,,,,,751,,,,,,,,751,751,,751,751,751,751,751,751,751,751', '751,751,751,,716,751,716,716,716,716,716,,,,,,,,,,716,,,,,751,,,,,,', ',,,,,,,,,,716,532,532,,,532,,,,716,716,716,716,,532,532,,532,532,532', '532,532,532,532,,,532,532,,,,532,532,532,532,,,,,,532,,,,,716,,,532', '532,,532,532,532,532,532,532,532,532,532,532,532,,,532,,,,,531,531,', ',531,,,,,,,,,531,531,532,531,531,531,531,531,531,531,,,531,531,,,,531', '531,531,531,,,,,,531,,,,,,,,531,531,,531,531,531,531,531,531,531,531', '531,531,531,,,531,,,,,,,,,,,,,,,,,,,,531' ] racc_action_check = arr = ::Array.new(26475, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_action_pointer = [ nil, 804, 1767, 1060, nil, 553, nil, nil, 12429, 1470, nil, 24537, 24005, 1229, nil, 1181, 1216, 390, 377, 1157, 866, nil, -69, 9069, 2895, 1190, nil, 454, nil, 2, 24973, 24848, 9629, 9769, 9909, nil, 1908, 10189, 10329, nil, 1086, 96, 376, 1140, 161, 11029, 11169, 15509, 1064, 693, nil, nil, nil, nil, nil, nil, nil, nil, nil, 23347, nil, -74, 11449, nil, -14, nil, 11589, 11729, nil, nil, 11869, 12009, 1069, nil, 24138, nil, nil, nil, nil, nil, -65, nil, nil, nil, nil, nil, nil, 1019, 1014, 995, 988, 23739, nil, nil, nil, nil, nil, nil, 646, nil, nil, 514, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 12569, nil, nil, nil, nil, 12709, 12849, 12989, 13129, 13269, 958, nil, 519, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 925, nil, 3036, 13969, 14109, 14249, 25414, 25041, nil, 14669, 14809, 14949, 15089, 15229, 15369, nil, nil, 1203, 126, 127, 956, 244, 860, 897, nil, 16489, 3318, 887, 16769, 16909, 17049, 17189, 17329, 17469, 17609, 17749, 17889, 18029, 18169, 18309, 18449, 18589, 18729, 18869, 19009, 19149, 19289, 19429, 19569, 19709, 19849, 19989, 20129, 20269, nil, nil, 25892, nil, nil, 870, 20409, nil, 873, nil, nil, nil, 20689, nil, nil, 20829, nil, 1344, nil, 833, 832, nil, 21389, 872, 21529, nil, 21669, nil, 832, 21809, nil, nil, 469, nil, 1344, 21949, 806, 3882, 808, 838, 799, 22509, 4305, -59, 1106, 1065, 785, 654, nil, 729, 682, -19, nil, nil, nil, 648, 159, 607, 5709, nil, 131, 645, 1062, nil, 638, nil, 6409, 4446, nil, 6549, 611, nil, 368, 509, 600, 7249, nil, nil, 577, 877, 22, 26, 7529, 7669, 537, 632, 508, 34, 42, 957, 571, 25, 590, nil, nil, 8229, nil, 8369, 12, 393, 485, 474, 414, 551, -56, 446, 488, nil, 103, nil, nil, nil, nil, nil, 380, nil, 314, nil, 485, nil, 171, 290, nil, 165, 414, nil, 161, 114, nil, 104, 112, nil, 243, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 4869, 24271, nil, nil, nil, nil, 104, nil, nil, 61, 8649, -96, nil, nil, 921, 1226, nil, nil, 1222, 1213, 305, 431, 24656, nil, nil, nil, 125, 0, -88, nil, nil, 23477, 23607, nil, 2472, nil, -93, nil, nil, 780, nil, nil, nil, nil, 52, nil, 25655, 25515, 22649, -43, 22229, 20969, 20549, 3741, 4446, 476, 689, 176, 180, 182, 198, 5289, 5149, 3342, 4164, 3318, 3882, 5009, 3600, 3459, 4023, 4305, 4587, 4728, 3153, -43, 4869, 3177, 2331, 322, 24781, nil, nil, nil, nil, nil, nil, 311, 292, 141, 145, nil, nil, 16629, nil, nil, 14389, nil, 13829, nil, 119, nil, 13689, nil, nil, 13549, 1485, 186, 213, nil, nil, 243, 13409, 277, 12149, 25346, 25278, 586, 337, nil, 11309, 315, nil, 10609, 10469, 26340, 26272, 3036, 10049, 439, 463, 510, nil, nil, 9489, nil, nil, 8929, nil, 367, nil, 288, 394, 25, 25978, nil, 367, 369, nil, 400, 404, 433, nil, nil, nil, nil, nil, nil, nil, nil, 421, 646, nil, nil, 8789, nil, nil, nil, 525, nil, nil, nil, 545, nil, nil, 553, 4728, 598, nil, 4587, 60, 29, 600, 615, nil, 8089, 25109, 25177, 7, nil, 220, 258, 129, nil, 1098, nil, 9, 7949, nil, 25577, nil, 7809, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 186, nil, nil, 151, nil, nil, nil, 522, nil, nil, 539, nil, 568, nil, 24404, nil, 562, 7389, 7109, 168, 603, 6969, 6829, 6689, 6269, 612, nil, nil, nil, 6129, 5989, 630, nil, 5849, 5569, nil, 166, 226, 250, 382, 620, 1062, 640, nil, nil, 25476, nil, nil, 743, -10, -63, nil, nil, nil, nil, 651, nil, 706, 5429, nil, nil, 23209, nil, 1329, 46, 23069, 697, nil, 710, 153, 30, 753, 290, 780, 781, 779, 22929, 1203, 844, 11, 904, 22789, nil, 793, 432, nil, nil, nil, 4164, 4023, 807, 304, nil, nil, 792, 24937, nil, 26233, nil, 26094, nil, 22369, nil, 514, nil, 806, 388, 819, nil, nil, nil, nil, 193, nil, 933, nil, nil, nil, nil, 939, nil, 22089, 831, 21, -1, 40, 86, 21249, nil, 1134, nil, 26103, 26171, 21109, nil, nil, nil, 418, 614, 3741, 3600, 25717, 154, 23872, 59, 763, 3459, nil, nil, nil, nil, nil, nil, nil, 852, 16349, 1485, 16209, nil, 879, nil, 1626, nil, 1767, nil, nil, 1908, nil, 2049, nil, 2190, 16069, 15929, 15789, 15649, 161, 5009, 883, 887, nil, 892, 904, 905, nil, 935, 921, 918, 909, 14529, nil, nil, 3177, nil, nil, nil, 2895, 2754, nil, nil, nil, 926, 321, nil, nil, 1061, nil, 2613, 945, 987, nil, nil, nil, nil, 963, 1077, 962, 960, nil, nil, nil, 961, 969, nil, 970, 972, nil, 973, nil, nil, 977, 707, 975, 653, nil, 1099, nil, 12289, 1113, 780, 2472, nil, 16, 41, 56, 422, 571, nil, 1031, 2331, 5289, nil, 736, 1153, 1165, 1049, nil, nil, nil, nil, nil, nil, nil, nil, 1072, 1059, nil, 2613, 5149, 10889, 2754, 239, nil, nil, 25601, nil, nil, 25584, nil, 24776, nil, nil, 1084, 1189, 10749, 965, 1141, 1192, 2190, 1097, 1202, nil, 2049, nil, nil, -8, 9349, nil, nil, nil, nil, nil, 25239, nil, 24745, nil, 23571, nil, 23441, nil, nil, nil, nil, 375, 639, 1087, nil, 18, nil, 1218, 1220, 9209, 1626, nil, nil, 1221, 749, nil, nil, nil, nil, 23311, nil, 1102, nil, nil, 1110, 1116, 1120, 1130, nil, 1134, nil, 259, nil, nil, nil, 322, 26032, nil, nil, 1153, nil, nil, nil, 1485, 852, 921, 924, 1229, 993, nil, 1156, 1161, 1162, 1164, 1165, 3341, 1169, 3253, 1344, nil, nil, nil, 4, 1203, nil, nil, 1062, 921, nil, 25961, nil, 25954, nil, 25747, nil, 25641, nil, nil, nil, 712, 1225, 1226, nil, 1310, 8509, 25824, 25756, 783, 25269, nil, nil, nil, nil, 3304, 1196, 793, nil, nil, nil, 1317, 1320, 1322, 1203, 1204, 1205, 1207, nil, nil, 1211, 20, -7, -9, 816, 508, 647, nil, nil, nil, nil, 25985, nil, nil, nil, nil, -11, nil, 1024, nil ] racc_action_default = [ -1, -627, -626, -627, -2, -613, -4, -5, -627, -8, -9, -627, -627, -627, -29, -627, -627, -627, -280, -627, -40, -43, -615, -627, -48, -50, -51, -52, -57, -257, -257, -257, -294, -333, -334, -69, -626, -73, -81, -83, -627, -516, -517, -627, -627, -627, -627, -627, -615, -238, -271, -272, -273, -274, -275, -276, -277, -278, -279, -602, -282, -285, -626, -292, -302, -405, -627, -627, -307, -310, -613, -627, -318, -325, -627, -335, -336, -447, -448, -449, -450, -451, -452, -626, -455, -626, -626, -626, -626, -626, -626, -626, -492, -498, -500, -501, -502, -503, -600, -505, -506, -601, -508, -509, -510, -511, -512, -513, -514, -515, -520, -521, 1058, -3, -614, -622, -623, -624, -7, -627, -627, -627, -627, -627, -627, -17, -627, -112, -113, -114, -115, -116, -117, -118, -119, -120, -124, -125, -126, -127, -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, -189, -190, -191, -192, -193, -194, -22, -121, -626, -627, -627, -626, -627, -627, -612, -627, -627, -627, -627, -627, -615, -616, -47, -627, -516, -517, -627, -280, -627, -627, -230, -627, -626, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -627, -411, -414, -627, -610, -611, -58, -627, -301, -627, -428, -431, -64, -626, -425, -65, -615, -66, -239, -252, -626, -626, -256, -627, -262, -627, -626, -492, -593, -615, -627, -67, -68, -613, -13, -14, -627, -71, -626, -615, -627, -74, -77, -626, -89, -90, -627, -627, -97, -294, -297, -615, -418, -333, -334, -337, -426, -627, -79, -627, -85, -290, -499, -627, -215, -216, -231, -627, -626, -284, -627, -627, -240, -619, -619, -627, -626, -303, -304, -548, -49, -627, -627, -627, -627, -613, -627, -614, -516, -517, -627, -627, -280, -627, -358, -359, -627, -321, -627, -112, -113, -154, -155, -156, -172, -177, -184, -187, -328, -627, -516, -517, -588, -589, -453, -627, -476, -627, -478, -627, -480, -627, -627, -460, -627, -627, -466, -627, -627, -472, -627, -627, -474, -627, -491, -493, -494, -495, -496, -6, -625, -23, -24, -25, -26, -27, -626, -627, -19, -20, -21, -122, -627, -30, -39, -267, -627, -627, -266, -31, -197, -615, -247, -248, -626, -626, -603, -604, -257, -423, -605, -606, -604, -603, -257, -422, -424, -605, -606, -37, -205, -38, -627, -41, -42, -195, -262, -44, -45, -46, -615, -300, -627, -627, -626, -290, -627, -627, -627, -206, -207, -208, -209, -210, -211, -212, -213, -217, -218, -219, -220, -221, -222, -223, -224, -225, -226, -227, -228, -229, -232, -233, -234, -235, -615, -626, -257, -603, -604, -54, -59, -258, -419, -626, -626, -615, -615, -296, -253, -627, -261, -254, -627, -259, -627, -263, -627, -598, -627, -599, -12, -614, -16, -615, -70, -288, -86, -75, -627, -615, -626, -627, -627, -96, -627, -499, -627, -82, -87, -627, -627, -627, -627, -236, -627, -439, -627, -286, -617, -241, -621, -620, -243, -621, -291, -627, -591, -619, -627, -627, -548, -408, -587, -587, -531, -533, -533, -533, -547, -549, -550, -551, -552, -553, -554, -555, -556, -627, -558, -560, -562, -567, -569, -570, -572, -577, -579, -580, -582, -583, -584, -627, -626, -349, -350, -626, -627, -627, -627, -627, -434, -626, -627, -627, -290, -315, -107, -108, -627, -110, -627, -280, -627, -627, -326, -548, -330, -627, -454, -477, -482, -483, -485, -456, -479, -457, -481, -458, -459, -627, -462, -464, -627, -465, -468, -469, -627, -470, -471, -627, -497, -627, -18, -627, -28, -270, -627, -627, -427, -627, -249, -251, -627, -627, -60, -245, -246, -420, -627, -627, -62, -421, -627, -627, -299, -603, -604, -603, -604, -615, -195, -627, -394, -395, -615, -397, -412, -53, -415, -626, -429, -432, -244, -295, -626, -260, -264, -627, -594, -595, -627, -596, -15, -72, -627, -78, -84, -615, -603, -604, -626, -93, -95, -627, -80, -627, -204, -214, -615, -626, -626, -283, -615, -619, -293, -592, -406, -626, -626, -615, -627, -529, -530, -627, -627, -540, -627, -543, -627, -545, -627, -360, -627, -362, -364, -371, -615, -561, -571, -581, -585, -626, -351, -626, -308, -352, -353, -311, -627, -314, -627, -615, -603, -604, -607, -289, -627, -107, -108, -109, -627, -627, -626, -319, -522, -523, -627, -322, -626, -626, -548, -627, -627, -615, -627, -626, -461, -463, -467, -473, -475, -10, -123, -268, -627, -198, -627, -618, -626, -33, -200, -34, -201, -61, -35, -203, -36, -202, -63, -196, -627, -627, -627, -627, -427, -627, -587, -587, -376, -626, -626, -626, -393, -627, -615, -399, -556, -564, -565, -575, -626, -417, -416, -55, -626, -626, -255, -265, -597, -76, -91, -88, -298, -626, -356, -626, -440, -626, -441, -442, -287, -242, -627, -627, -615, -587, -568, -586, -532, -533, -533, -559, -533, -533, -578, -533, -556, -573, -615, -627, -369, -627, -557, -627, -354, -627, -627, -626, -626, -313, -627, -427, -627, -107, -108, -111, -615, -626, -627, -525, -627, -627, -627, -615, -527, -331, -590, -484, -487, -488, -489, -490, -627, -269, -32, -199, -250, -627, -237, -627, -374, -375, -384, -378, -386, -627, -389, -627, -391, -396, -627, -627, -627, -563, -627, -627, -626, -627, -627, -11, -626, -446, -357, -627, -627, -444, -409, -410, -407, -528, -627, -536, -627, -538, -627, -541, -627, -544, -546, -361, -363, -367, -627, -372, -305, -627, -306, -627, -627, -627, -626, -316, -427, -627, -627, -323, -327, -329, -526, -548, -486, -587, -566, -377, -626, -626, -626, -626, -576, -626, -398, -615, -401, -403, -404, -574, -627, -290, -413, -627, -430, -433, -445, -626, -98, -99, -627, -627, -106, -443, -533, -533, -533, -533, -365, -627, -370, -627, -626, -309, -312, -264, -626, -626, -320, -524, -626, -626, -373, -627, -381, -627, -383, -627, -387, -627, -390, -392, -400, -627, -289, -607, -56, -439, -626, -627, -627, -105, -627, -534, -537, -539, -542, -627, -368, -626, -435, -436, -437, -627, -627, -627, -626, -626, -626, -626, -402, -438, -615, -603, -604, -607, -104, -533, -366, -355, -317, -324, -332, -627, -379, -382, -385, -388, -427, -535, -626, -380 ] clist = [ '6,536,213,220,428,434,368,301,315,315,337,262,421,589,135,135,501,130', '130,566,133,133,444,395,125,208,117,699,551,327,418,279,279,279,558', '678,759,441,114,341,342,675,315,345,675,263,4,340,340,582,585,340,113', '800,486,539,542,638,9,375,332,933,853,844,9,274,322,266,272,275,726', '118,964,495,823,749,678,803,318,962,130,376,958,378,380,383,386,389', '392,378,930,117,401,402,403,404,666,130,490,993,340,340,340,340,670', '671,527,299,856,841,281,281,281,734,737,377,356,346,711,712,619,393', '834,622,280,280,280,602,867,604,603,297,870,614,996,616,358,758,620', '605,334,620,986,762,223,949,329,633,802,614,906,277,291,292,333,804', '669,961,549,706,501,339,407,414,485,810,493,814,494,815,9,1026,740,827', '678,913,374,399,379,405,964,382,675,675,1,385,958,1036,388,391,877,764', '765,394,868,1024,355,207,839,447,448,449,450,909,124,836,952,607,338', '452,422,279,2,545,372,353,753,900,668,335,438,369,715,717,719,848,328', '865,930,17,566,330,702,1044,336,17,343,857,344,709,858,746,,428,434', '558,,,429,,224,,,,659,738,,,,224,224,224,506,17,306,306,279,844,,705', '508,422,279,315,,279,,,500,500,813,954,,,376,566,,841,,528,315,521,524', '224,224,794,,224,350,,558,,417,801,492,685,451,,531,417,,537,690,694', '117,,586,587,,721,687,841,690,820,340,340,511,315,,315,16,413,419,,546', '592,16,439,443,525,510,17,517,,806,281,224,224,224,224,17,274,512,840', '281,842,1045,,,280,,497,890,891,16,,117,1027,280,513,,,,,519,767,,861', '767,,997,,,690,514,,491,606,,941,300,741,588,297,566,496,566,,297,,841', '919,639,,6,,,,,816,135,,,130,547,,133,,,678,632,,500,500,,831,645,,675', ',,871,872,,,,17,224,224,224,566,,16,224,224,224,224,224,224,873,631', '16,422,279,,558,,444,,438,17,,9,646,,661,644,,,651,,819,650,,721,,783', '850,807,,,,788,662,645,,,429,528,315,,662,662,,224,,528,315,,,224,,942', '224,,1037,921,923,,925,927,,928,816,,698,,998,422,279,828,646,,17,667', '17,,798,438,306,17,955,,,956,654,,16,438,,943,,690,,,,306,,,,,,866,', ',17,429,224,,980,,16,,412,,,429,682,940,,224,224,806,837,,806,837,674', ',,672,673,,600,757,600,,300,763,422,279,,,,,,,,683,438,566,721,,721', '686,,,735,735,,,,,,812,,,,703,,,973,,754,16,,16,429,,566,,16,,17,,,135', ',1032,130,639,,133,988,558,805,772,1019,1020,1021,1022,,300,811,528', '315,16,300,,1028,,797,,,,821,315,662,639,1030,1031,,500,,1054,,,,,806', ',224,,984,721,,,,645,,805,,,,875,,,824,829,,,,,807,,,807,835,,807,1055', '807,,,,,,,778,862,,,639,,,646,,340,651,824,,824,,,16,,,721,17,721,,', ',,,306,,224,,,422,279,837,306,,798,438,,798,,798,224,,779,781,,,,130', '784,786,,,443,,721,500,869,315,,,,874,822,,805,429,830,,,,,417,,,,,893', '893,893,,,,,,,690,,,17,,852,17,807,1038,807,,807,224,807,,911,,,,915', ',,935,,224,,860,,224,,340,,,16,,944,,,,,,639,876,340,29,,,,,,29,,,,', ',798,807,798,,798,,798,224,224,29,,315,,224,224,,,224,29,29,29,735,29', '315,951,,,797,,945,797,,797,,,884,,,,,,,,,,,,,16,306,798,16,29,29,,', '29,918,,,306,,799,,,,,,,,,929,17,17,731,,,733,,,1008,,,,,,,,,,893,893', '893,893,,893,948,,,1015,29,,,995,,29,29,29,29,29,438,224,,,843,,845', '224,,,,,,17,17,,,,824,,17,,,,797,,797,,797,,797,224,,,,,,,,,422,279', ',,,,,639,,,438,824,,,,,,,893,893,893,893,903,16,16,17,41,,,17,17,,41', ',797,894,896,898,429,,17,,893,,,29,29,29,29,832,833,,29,29,29,29,29', '29,,,41,304,304,,,,,,,29,224,,17,17,16,16,,,,,,16,17,224,,,,,,,,,,,', '348,,,370,,,,,29,,,,882,,29,,,29,,,,,965,,,,17,,,,17,16,,,976,16,16', '29,,29,,,,41,29,,16,,957,,959,,41,,,,,905,,,17,907,908,,,,,,,29,,29', '912,981,,982,,983,16,16,,,,,29,29,,,16,,,,,17,,1000,1002,1004,1006,', '1007,,,,937,938,,,17,,,,,17,,,17,17,,,,,,,42,,,16,,,42,16,,,224,,,,41', ',,,,19,,,,29,,19,,,1033,969,1034,,1035,972,42,305,305,16,41,,,,,,,,', '1043,,1050,1051,1052,1053,19,,,,,,,,,,992,,,,,415,349,16,29,371,1057', ',446,,,1056,,,,,,,16,,,354,,16,,,16,16,,1013,,,,,41,,41,,,,304,41,,', '1025,42,,,,1029,,,,,42,,,304,,,,29,,,19,,41,,,,29,,,19,503,,505,,507', ',,509,,,29,,,,,,,,,,370,,370,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,548,,,,,29', ',,29,,,,,42,29,,,41,,,,,,,,,29,,,,29,,19,,,,,42,,,442,,,,,,,,,,,,,,', ',19,,,,,,,,,29,29,,,,,29,29,,,29,,18,,,635,,,18,,,,,,,,,,,,,,,,,42,', '42,,,,305,42,,,,18,308,308,,,,,,19,,19,41,305,,,19,,,304,29,29,42,,', ',,304,,,,,,,,,352,,,,,19,,,,,,,,,371,,371,676,,,548,,679,29,,,681,,', '29,,,,,,29,29,,,,,,29,18,,,,41,,,41,,18,29,,,,,676,,,548,,,42,,,,,,', ',,,,,,,,,,,,19,,,,29,727,,,29,29,,,,,,,,,,29,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,29,,29,29,,,18,,,,,,29,29,,,,304,,,,,773,,,,676,548,304,,18,,', ',,,,42,,,41,41,,,305,,,,,,,29,305,,,29,19,,,,,,,817,,,818,,,,,,,,,,', ',,,,,,,,29,826,,,,,41,41,18,,18,,,41,308,18,,,,,,847,,42,,,42,,,,,308', ',29,,,,,,,18,446,19,,,19,,,29,,,,,29,,370,29,29,41,,,,41,41,,,,,601', ',601,,,41,29,883,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,41,41,,,,,,442,,,41,,', '18,,,,,,,305,,,,,,,,,,,305,,,,,,,,,,,,42,42,370,,,,41,,,,41,,,,974,', ',,,19,19,,,,,,,,,,,,,,,,,,,548,41,,,,,,,,,,,42,42,,,,,,42,,,,,,,,,,', ',19,19,,41,,18,,19,,,,,308,,,,,,41,,308,,991,41,,,41,41,,,371,,,42,', ',,42,42,,,,,,,,,,42,,,,19,,,,19,19,,,,,231,,,,,19,,,,278,278,278,,,18', ',,18,42,42,,,324,325,326,,,,42,,,,,,,,,19,19,278,,,,,,,,19,,,,,,,,,', ',,,,,,371,,,,42,,,,42,,,,975,,,,,,,,,,,19,,,,19,,,,979,,,,,,,42,,,,', ',,,,,,,,,,308,,,,19,,,,,,,308,,,,,,,42,,,,,18,18,,,,,,,,,42,,,,19,42', ',,42,42,,,,,,,,,,19,,,,,19,,,19,19,,,,,,,,,,278,420,278,18,18,,440,445', ',881,18,,,,,,,,,,,,231,,,459,460,461,462,463,464,465,466,467,468,469', '470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,,601,,,18', ',278,,18,18,,,278,,,278,,,,18,,,278,,278,,278,,,278,,,,,,,,,,,,,,,,', ',,,,,18,18,,,,,,,,,18,,,,,533,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,,601,,', ',18,,,,18,,,,978,,,,,,,,,,,,,,,,,,,,,,,,,,18,,,,,,,,,,,,,,,,,,,,,278', ',,,,,,,,,,,18,,,,,,,,,,,,,,,18,,,,,18,,,18,18,,278,,440,660,420,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,,,278,,278,,,,278,,,,,,,,,,', ',278,,,,,,,,,696,697,,,,,,,,,,278,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,,278', ',,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', '278,775,,,278,278,780,782,,,,,785,787,,,660,789,,,,,,,,,,,,,,,,,,,,', ',,,278,,,278,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,', ',,,,,,,,,,278,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,,,278,,885,,,,,,,,,', ',,,,780,782,787,785,,888,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,885,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,278' ] racc_goto_table = arr = ::Array.new(3060, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end clist = [ '6,10,27,34,40,40,60,53,68,68,89,155,25,95,65,65,76,61,61,189,64,64,20', '60,17,17,98,13,154,34,30,36,36,36,185,200,99,30,8,19,19,77,68,19,77', '39,2,32,32,92,92,32,5,144,40,72,72,26,9,171,6,135,93,195,9,74,67,41', '41,41,134,7,150,25,14,58,200,147,54,149,61,6,196,6,6,6,6,6,6,6,132,98', '19,19,19,19,43,61,42,110,32,32,32,32,43,43,55,50,14,190,73,73,73,94', '94,172,111,5,139,139,175,172,147,175,71,71,71,59,112,59,113,49,114,176', '115,176,116,117,176,118,73,176,135,119,22,120,51,66,136,176,46,48,48', '48,71,142,45,148,151,152,76,153,33,31,156,157,160,161,162,163,9,164', '165,166,200,167,170,7,173,9,150,174,77,77,1,177,196,149,178,179,180', '181,182,183,184,135,21,18,188,32,32,32,32,15,11,192,193,199,91,27,6', '36,3,88,87,96,97,147,75,70,61,100,187,187,187,134,101,58,132,24,189', '102,103,135,104,24,105,106,107,154,108,109,,40,40,185,,,74,,24,,,,25', '95,,,,24,24,24,171,24,24,24,36,195,,72,34,6,36,68,,36,,,6,6,43,144,', ',6,189,,190,,53,68,27,34,24,24,26,,24,24,,185,,71,145,74,55,51,,27,71', ',32,40,55,98,,19,19,,133,25,190,40,26,32,32,8,68,,68,23,22,22,,6,27', '23,22,22,67,5,24,54,,189,73,24,24,24,24,24,74,9,145,73,145,93,,,71,', '51,139,139,23,,98,14,71,50,,,,,50,176,,26,176,,99,,,40,51,,48,39,,94', '12,25,5,49,189,48,189,,49,,190,139,34,,6,,,,,76,65,,,61,73,,64,,,200', '17,,6,6,,72,6,,77,,,10,10,,,,24,24,24,24,189,,23,24,24,24,24,24,24,154', '2,23,6,36,,185,,20,,61,24,,9,74,,34,41,,,74,,55,41,,133,,42,133,191', ',,,42,6,6,,,74,53,68,,6,6,,24,,53,68,,,24,,26,24,,13,187,187,,187,187', ',187,76,,32,,139,6,36,30,74,,24,41,24,,140,61,24,24,145,,,145,51,,23', '61,,10,,40,,,,24,,,,,,25,,,24,74,24,,145,,23,,12,,,74,9,92,,24,24,189', '140,,189,140,73,,,51,51,,24,32,24,,12,32,6,36,,,,,,,,51,61,189,133,', '133,51,,,98,98,,,,,,89,,,,73,,,92,,98,23,,23,74,,189,,23,,24,,,65,,145', '61,34,,64,92,185,34,17,187,187,187,187,,12,155,53,68,23,12,,95,,138', ',,,53,68,6,34,10,10,,6,,26,,,,,189,,24,,133,133,,,,6,,34,,,,60,,,6,6', ',,,,191,,,191,138,,191,187,191,,,,,,,73,19,,,34,,,74,,32,74,6,,6,,,23', ',,133,24,133,,,,,,24,,24,,,6,36,140,24,,140,61,,140,,140,24,,22,22,', ',,61,22,22,,,22,,133,6,98,68,,,,98,51,,34,74,51,,,,,71,,,,,6,6,6,,,', ',,,40,,,24,,51,24,191,25,191,,191,24,191,,6,,,,6,,,19,,24,,71,,24,,32', ',,23,,19,,,,,,34,51,32,44,,,,,,44,,,,,,140,191,140,,140,,140,24,24,44', ',68,,24,24,,,24,44,44,44,98,44,68,138,,,138,,98,138,,138,,,22,,,,,,', ',,,,,,23,24,140,23,44,44,,,44,51,,,24,,143,,,,,,,,,51,24,24,12,,,12', ',,34,,,,,,,,,,6,6,6,6,,6,51,,,27,44,,,98,,44,44,44,44,44,61,24,,,143', ',143,24,,,,,,24,24,,,,6,,24,,,,138,,138,,138,,138,24,,,,,,,,,6,36,,', ',,,34,,,61,6,,,,,,,6,6,6,6,24,23,23,24,56,,,24,24,,56,,138,141,141,141', '74,,24,,6,,,44,44,44,44,12,12,,44,44,44,44,44,44,,,56,56,56,,,,,,,44', '24,,24,24,23,23,,,,,,23,24,24,,,,,,,,,,,,56,,,56,,,,,44,,,,12,,44,,', '44,,,,,24,,,,24,,,,24,23,,,24,23,23,44,,44,,,,56,44,,23,,143,,143,,56', ',,,,12,,,24,12,12,,,,,,,44,,44,12,143,,143,,143,23,23,,,,,44,44,,,23', ',,,,24,,141,141,141,141,,141,,,,12,12,,,24,,,,,24,,,24,24,,,,,,,57,', ',23,,,57,23,,,24,,,,56,,,,,29,,,,44,,29,,,143,12,143,,143,12,57,57,57', '23,56,,,,,,,,,143,,141,141,141,141,29,,,,,,,,,,12,,,,,69,57,23,44,57', '141,,69,,,143,,,,,,,23,,,29,,23,,,23,23,,12,,,,,56,,56,,,,56,56,,,12', '57,,,,12,,,,,57,,,56,,,,44,,,29,,56,,,,44,,,29,69,,69,,69,,,69,,,44', ',,,,,,,,,56,,56,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,69,,,,,44,,,44,,,,,57', '44,,,56,,,,,,,,,44,,,,44,,29,,,,,57,,,29,,,,,,,,,,,,,,,,29,,,,,,,,,44', '44,,,,,44,44,,,44,,28,,,69,,,28,,,,,,,,,,,,,,,,,57,,57,,,,57,57,,,,28', '28,28,,,,,,29,,29,56,57,,,29,,,56,44,44,57,,,,,56,,,,,,,,,28,,,,,29', ',,,,,,,,57,,57,69,,,69,,69,44,,,69,,,44,,,,,,44,44,,,,,,44,28,,,,56', ',,56,,28,44,,,,,69,,,69,,,57,,,,,,,,,,,,,,,,,,,29,,,,44,69,,,44,44,', ',,,,,,,,44,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,44,,44,44,,,28,,,,,,44,44,,', ',56,,,,,69,,,,69,69,56,,28,,,,,,,57,,,56,56,,,57,,,,,,,44,57,,,44,29', ',,,,,,69,,,69,,,,,,,,,,,,,,,,,,,44,69,,,,,56,56,28,,28,,,56,28,28,,', ',,,69,,57,,,57,,,,,28,,44,,,,,,,28,69,29,,,29,,,44,,,,,44,,56,44,44', '56,,,,56,56,,,,,28,,28,,,56,44,69,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,56,56', ',,,,,29,,,56,,,28,,,,,,,57,,,,,,,,,,,57,,,,,,,,,,,,57,57,56,,,,56,,', ',56,,,,56,,,,,29,29,,,,,,,,,,,,,,,,,,,69,56,,,,,,,,,,,57,57,,,,,,57', ',,,,,,,,,,,29,29,,56,,28,,29,,,,,28,,,,,,56,,28,,69,56,,,56,56,,,57', ',,57,,,,57,57,,,,,,,,,,57,,,,29,,,,29,29,,,,,35,,,,,29,,,,35,35,35,', ',28,,,28,57,57,,,35,35,35,,,,57,,,,,,,,,29,29,35,,,,,,,,29,,,,,,,,,', ',,,,,,57,,,,57,,,,57,,,,57,,,,,,,,,,,29,,,,29,,,,29,,,,,,,57,,,,,,,', ',,,,,,,28,,,,29,,,,,,,28,,,,,,,57,,,,,28,28,,,,,,,,,57,,,,29,57,,,57', '57,,,,,,,,,,29,,,,,29,,,29,29,,,,,,,,,,35,35,35,28,28,,35,35,,28,28', ',,,,,,,,,,,35,,,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35', '35,35,35,35,35,35,35,35,,28,,,28,,35,,28,28,,,35,,,35,,,,28,,,35,,35', ',35,,,35,,,,,,,,,,,,,,,,,,,,,,28,28,,,,,,,,,28,,,,,35,,,,,,,,,35,,,', ',,,,,,,,,,,,,,,,,28,,,,28,,,,28,,,,28,,,,,,,,,,,,,,,,,,,,,,,,,,28,,', ',,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,28,,,,,,,,,,,,,,,28,,,,,28,,,28,28,', '35,,35,35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,,,35,,35,,,', '35,,,,,,,,,,,,35,,,,,,,,,35,35,,,,,,,,,,35,,,35,,,,,,,,,,,,,,,,,,,,', ',,,,,,35,,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,35,35,,,35,35,35,35,,,,,35,35,,,35,35,,,,,,,,,,,,,,,,,,,,,,', ',35,,,35,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,', ',,,,35,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,35,,35,,,,,,,,,,,,,,35,35', '35,35,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', ',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,35' ] racc_goto_check = arr = ::Array.new(3060, nil) idx = 0 clist.each do |str| str.split(',', -1).each do |i| arr[idx] = i.to_i unless i.empty? idx += 1 end end racc_goto_pointer = [ nil, 184, 44, 212, nil, 47, -2, 63, 33, 56, -327, 194, 354, -508, -625, -620, nil, 13, 185, -27, -195, 125, 121, 328, 227, -200, -364, -15, 1500, 1248, -180, -47, -19, 37, -19, 2045, -1, nil, nil, 18, -209, 38, -168, -389, 848, -333, -663, nil, 119, 95, 71, 85, nil, -30, 40, -213, 1036, 1229, -523, -229, -68, 6, nil, nil, 9, 3, -264, 22, -29, 1089, 157, 92, -278, 78, 35, -268, -265, -458, nil, nil, nil, nil, nil, nil, nil, nil, nil, 140, -123, -54, nil, 143, -292, -669, -473, -333, 144, -386, 21, -569, 147, 166, 170, -305, 171, 168, -497, 169, -497, -354, -842, 44, -625, -227, -625, -811, 63, -467, -229, -463, -730, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, -759, -248, -497, -790, -516, nil, -3, -434, -137, 248, -509, 260, -611, -361, nil, -587, -744, -822, -829, -181, -390, 96, -311, -14, -97, -501, nil, nil, -104, -503, -103, -502, -821, -418, -527, -652, nil, nil, 96, -24, 30, 92, 94, -262, -244, 97, 99, 99, -574, -420, -420, 102, -561, -305, nil, -333, -516, -320, -605, -186, -505, -683, nil, -653, -813, nil, nil, -166, -467 ] racc_goto_default = [ nil, nil, nil, nil, 5, nil, 294, 7, 347, 295, nil, nil, 535, nil, 854, nil, 293, nil, nil, nil, 14, 15, 21, 230, 323, nil, nil, 751, 228, 229, nil, nil, 20, nil, 331, 24, 25, 26, 27, nil, 693, nil, nil, nil, 312, nil, nil, 28, 423, 35, nil, nil, 37, 40, 39, nil, 225, 226, 599, nil, 132, 431, 131, 134, 78, 79, nil, 93, 49, 284, nil, 424, nil, 425, 436, 647, 498, 282, 267, 50, 51, 52, 53, 54, 55, 56, 57, 58, nil, 268, 64, nil, nil, nil, nil, nil, nil, nil, 583, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 723, 565, nil, 724, 953, 796, 553, nil, 554, nil, nil, 555, nil, 557, 663, nil, nil, nil, 563, nil, nil, nil, 761, nil, nil, nil, 435, 269, nil, nil, nil, nil, nil, nil, nil, nil, 77, 80, 82, nil, nil, nil, nil, nil, 609, nil, nil, nil, nil, nil, nil, nil, nil, 838, 552, nil, 556, 846, 568, 570, 571, 808, 574, 575, 809, 578, 581, nil, 288 ] racc_reduce_table = [ 0, 0, :racc_error, 0, 148, :_reduce_1, 2, 146, :_reduce_2, 2, 147, :_reduce_3, 1, 149, :_reduce_none, 1, 149, :_reduce_none, 3, 149, :_reduce_6, 2, 149, :_reduce_none, 1, 152, :_reduce_8, 0, 156, :_reduce_9, 5, 152, :_reduce_10, 4, 155, :_reduce_11, 2, 157, :_reduce_12, 1, 161, :_reduce_none, 1, 161, :_reduce_none, 3, 161, :_reduce_15, 2, 161, :_reduce_16, 0, 178, :_reduce_17, 4, 154, :_reduce_18, 3, 154, :_reduce_19, 3, 154, :_reduce_20, 3, 154, :_reduce_21, 2, 154, :_reduce_22, 3, 154, :_reduce_23, 3, 154, :_reduce_24, 3, 154, :_reduce_25, 3, 154, :_reduce_26, 3, 154, :_reduce_27, 4, 154, :_reduce_28, 1, 154, :_reduce_none, 3, 154, :_reduce_30, 3, 154, :_reduce_31, 6, 154, :_reduce_32, 5, 154, :_reduce_33, 5, 154, :_reduce_34, 5, 154, :_reduce_35, 5, 154, :_reduce_36, 3, 154, :_reduce_37, 3, 154, :_reduce_38, 3, 154, :_reduce_39, 1, 154, :_reduce_none, 3, 165, :_reduce_41, 3, 165, :_reduce_42, 1, 177, :_reduce_none, 3, 177, :_reduce_44, 3, 177, :_reduce_45, 3, 177, :_reduce_46, 2, 177, :_reduce_47, 1, 177, :_reduce_none, 1, 164, :_reduce_49, 1, 167, :_reduce_none, 1, 167, :_reduce_none, 1, 182, :_reduce_none, 4, 182, :_reduce_53, 0, 190, :_reduce_54, 0, 191, :_reduce_55, 6, 187, :_reduce_56, 1, 189, :_reduce_57, 2, 181, :_reduce_58, 3, 181, :_reduce_59, 4, 181, :_reduce_60, 5, 181, :_reduce_61, 4, 181, :_reduce_62, 5, 181, :_reduce_63, 2, 181, :_reduce_64, 2, 181, :_reduce_65, 2, 181, :_reduce_66, 2, 181, :_reduce_67, 2, 181, :_reduce_68, 1, 166, :_reduce_none, 3, 166, :_reduce_70, 1, 195, :_reduce_none, 3, 195, :_reduce_72, 1, 194, :_reduce_73, 2, 194, :_reduce_74, 3, 194, :_reduce_75, 5, 194, :_reduce_76, 2, 194, :_reduce_77, 4, 194, :_reduce_78, 2, 194, :_reduce_79, 4, 194, :_reduce_80, 1, 194, :_reduce_81, 3, 194, :_reduce_82, 1, 198, :_reduce_none, 3, 198, :_reduce_84, 2, 197, :_reduce_85, 3, 197, :_reduce_86, 1, 200, :_reduce_87, 3, 200, :_reduce_88, 1, 199, :_reduce_89, 1, 199, :_reduce_90, 4, 199, :_reduce_91, 3, 199, :_reduce_92, 3, 199, :_reduce_93, 3, 199, :_reduce_94, 3, 199, :_reduce_95, 2, 199, :_reduce_96, 1, 199, :_reduce_97, 1, 174, :_reduce_98, 1, 174, :_reduce_99, 4, 174, :_reduce_100, 3, 174, :_reduce_101, 3, 174, :_reduce_102, 3, 174, :_reduce_103, 3, 174, :_reduce_104, 2, 174, :_reduce_105, 1, 174, :_reduce_106, 1, 203, :_reduce_107, 1, 203, :_reduce_none, 2, 204, :_reduce_109, 1, 204, :_reduce_110, 3, 204, :_reduce_111, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_none, 1, 205, :_reduce_115, 1, 205, :_reduce_116, 1, 208, :_reduce_none, 1, 208, :_reduce_none, 1, 162, :_reduce_119, 1, 162, :_reduce_none, 1, 163, :_reduce_121, 0, 211, :_reduce_122, 4, 163, :_reduce_123, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 206, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 1, 207, :_reduce_none, 3, 180, :_reduce_195, 5, 180, :_reduce_196, 3, 180, :_reduce_197, 5, 180, :_reduce_198, 6, 180, :_reduce_199, 5, 180, :_reduce_200, 5, 180, :_reduce_201, 5, 180, :_reduce_202, 5, 180, :_reduce_203, 4, 180, :_reduce_204, 3, 180, :_reduce_205, 3, 180, :_reduce_206, 3, 180, :_reduce_207, 3, 180, :_reduce_208, 3, 180, :_reduce_209, 3, 180, :_reduce_210, 3, 180, :_reduce_211, 3, 180, :_reduce_212, 3, 180, :_reduce_213, 4, 180, :_reduce_214, 2, 180, :_reduce_215, 2, 180, :_reduce_216, 3, 180, :_reduce_217, 3, 180, :_reduce_218, 3, 180, :_reduce_219, 3, 180, :_reduce_220, 3, 180, :_reduce_221, 3, 180, :_reduce_222, 3, 180, :_reduce_223, 3, 180, :_reduce_224, 3, 180, :_reduce_225, 3, 180, :_reduce_226, 3, 180, :_reduce_227, 3, 180, :_reduce_228, 3, 180, :_reduce_229, 2, 180, :_reduce_230, 2, 180, :_reduce_231, 3, 180, :_reduce_232, 3, 180, :_reduce_233, 3, 180, :_reduce_234, 3, 180, :_reduce_235, 3, 180, :_reduce_236, 6, 180, :_reduce_237, 1, 180, :_reduce_none, 1, 214, :_reduce_239, 1, 215, :_reduce_none, 2, 215, :_reduce_241, 4, 215, :_reduce_242, 2, 215, :_reduce_243, 3, 219, :_reduce_244, 1, 220, :_reduce_none, 1, 220, :_reduce_none, 1, 170, :_reduce_247, 1, 170, :_reduce_248, 2, 170, :_reduce_249, 4, 170, :_reduce_250, 2, 170, :_reduce_251, 1, 193, :_reduce_252, 2, 193, :_reduce_253, 2, 193, :_reduce_254, 4, 193, :_reduce_255, 1, 193, :_reduce_256, 0, 223, :_reduce_257, 2, 186, :_reduce_258, 2, 222, :_reduce_259, 2, 221, :_reduce_260, 1, 221, :_reduce_none, 1, 216, :_reduce_262, 2, 216, :_reduce_263, 3, 216, :_reduce_264, 4, 216, :_reduce_265, 1, 176, :_reduce_266, 1, 176, :_reduce_267, 3, 175, :_reduce_268, 4, 175, :_reduce_269, 2, 175, :_reduce_270, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_none, 1, 213, :_reduce_281, 0, 246, :_reduce_282, 4, 213, :_reduce_283, 2, 213, :_reduce_284, 0, 247, :_reduce_285, 0, 248, :_reduce_286, 5, 213, :_reduce_287, 3, 213, :_reduce_288, 3, 213, :_reduce_289, 2, 213, :_reduce_290, 3, 213, :_reduce_291, 0, 249, :_reduce_292, 4, 213, :_reduce_293, 1, 213, :_reduce_294, 4, 213, :_reduce_295, 3, 213, :_reduce_296, 1, 213, :_reduce_297, 5, 213, :_reduce_298, 4, 213, :_reduce_299, 3, 213, :_reduce_300, 2, 213, :_reduce_301, 1, 213, :_reduce_none, 2, 213, :_reduce_303, 2, 213, :_reduce_304, 6, 213, :_reduce_305, 6, 213, :_reduce_306, 0, 250, :_reduce_307, 0, 251, :_reduce_308, 7, 213, :_reduce_309, 0, 252, :_reduce_310, 0, 253, :_reduce_311, 7, 213, :_reduce_312, 5, 213, :_reduce_313, 4, 213, :_reduce_314, 0, 254, :_reduce_315, 0, 255, :_reduce_316, 9, 213, :_reduce_317, 0, 256, :_reduce_318, 0, 257, :_reduce_319, 7, 213, :_reduce_320, 0, 258, :_reduce_321, 0, 259, :_reduce_322, 0, 260, :_reduce_323, 9, 213, :_reduce_324, 0, 261, :_reduce_325, 0, 262, :_reduce_326, 6, 213, :_reduce_327, 0, 263, :_reduce_328, 6, 213, :_reduce_329, 0, 264, :_reduce_330, 0, 265, :_reduce_331, 9, 213, :_reduce_332, 1, 213, :_reduce_333, 1, 213, :_reduce_334, 1, 213, :_reduce_335, 1, 213, :_reduce_336, 1, 169, :_reduce_337, 1, 266, :_reduce_none, 1, 267, :_reduce_none, 1, 268, :_reduce_none, 1, 269, :_reduce_none, 1, 270, :_reduce_none, 1, 271, :_reduce_none, 1, 272, :_reduce_none, 1, 273, :_reduce_none, 1, 274, :_reduce_none, 1, 275, :_reduce_none, 1, 276, :_reduce_none, 1, 237, :_reduce_none, 1, 237, :_reduce_none, 2, 237, :_reduce_none, 1, 239, :_reduce_none, 1, 239, :_reduce_none, 1, 238, :_reduce_none, 5, 238, :_reduce_355, 1, 159, :_reduce_none, 2, 159, :_reduce_357, 1, 241, :_reduce_none, 1, 241, :_reduce_359, 1, 277, :_reduce_none, 3, 277, :_reduce_361, 1, 280, :_reduce_362, 3, 280, :_reduce_363, 1, 279, :_reduce_364, 4, 279, :_reduce_365, 6, 279, :_reduce_366, 3, 279, :_reduce_367, 5, 279, :_reduce_368, 2, 279, :_reduce_369, 4, 279, :_reduce_370, 1, 279, :_reduce_371, 3, 279, :_reduce_372, 4, 281, :_reduce_373, 2, 281, :_reduce_374, 2, 281, :_reduce_375, 1, 281, :_reduce_376, 2, 286, :_reduce_377, 1, 286, :_reduce_none, 6, 287, :_reduce_379, 8, 287, :_reduce_380, 4, 287, :_reduce_381, 6, 287, :_reduce_382, 4, 287, :_reduce_383, 2, 287, :_reduce_384, 6, 287, :_reduce_385, 2, 287, :_reduce_386, 4, 287, :_reduce_387, 6, 287, :_reduce_388, 2, 287, :_reduce_389, 4, 287, :_reduce_390, 2, 287, :_reduce_391, 4, 287, :_reduce_392, 1, 287, :_reduce_393, 1, 188, :_reduce_394, 1, 188, :_reduce_none, 3, 291, :_reduce_396, 1, 291, :_reduce_397, 4, 291, :_reduce_398, 1, 292, :_reduce_none, 4, 292, :_reduce_400, 1, 293, :_reduce_401, 3, 293, :_reduce_402, 1, 294, :_reduce_403, 1, 294, :_reduce_none, 0, 298, :_reduce_405, 3, 236, :_reduce_406, 4, 296, :_reduce_407, 1, 296, :_reduce_408, 3, 297, :_reduce_409, 3, 297, :_reduce_410, 0, 301, :_reduce_411, 0, 302, :_reduce_412, 6, 300, :_reduce_413, 2, 183, :_reduce_414, 4, 183, :_reduce_415, 5, 183, :_reduce_416, 5, 183, :_reduce_417, 0, 304, :_reduce_418, 3, 235, :_reduce_419, 4, 235, :_reduce_420, 4, 235, :_reduce_421, 3, 235, :_reduce_422, 3, 235, :_reduce_423, 3, 235, :_reduce_424, 2, 235, :_reduce_425, 1, 235, :_reduce_426, 4, 235, :_reduce_427, 0, 305, :_reduce_428, 0, 306, :_reduce_429, 6, 234, :_reduce_430, 0, 307, :_reduce_431, 0, 308, :_reduce_432, 6, 234, :_reduce_433, 0, 310, :_reduce_434, 6, 240, :_reduce_435, 1, 309, :_reduce_none, 1, 309, :_reduce_none, 6, 158, :_reduce_438, 0, 158, :_reduce_439, 1, 311, :_reduce_440, 1, 311, :_reduce_none, 1, 311, :_reduce_none, 2, 312, :_reduce_443, 1, 312, :_reduce_none, 2, 160, :_reduce_445, 1, 160, :_reduce_none, 1, 224, :_reduce_447, 1, 224, :_reduce_448, 1, 224, :_reduce_none, 1, 225, :_reduce_450, 1, 314, :_reduce_451, 1, 314, :_reduce_none, 2, 314, :_reduce_453, 3, 315, :_reduce_454, 1, 315, :_reduce_455, 3, 226, :_reduce_456, 3, 227, :_reduce_457, 3, 228, :_reduce_458, 3, 228, :_reduce_459, 1, 319, :_reduce_460, 3, 319, :_reduce_461, 1, 320, :_reduce_none, 2, 320, :_reduce_463, 3, 230, :_reduce_464, 3, 230, :_reduce_465, 1, 322, :_reduce_466, 3, 322, :_reduce_467, 3, 229, :_reduce_468, 3, 229, :_reduce_469, 3, 231, :_reduce_470, 3, 231, :_reduce_471, 1, 323, :_reduce_472, 3, 323, :_reduce_473, 1, 324, :_reduce_474, 3, 324, :_reduce_475, 1, 316, :_reduce_476, 2, 316, :_reduce_477, 1, 317, :_reduce_478, 2, 317, :_reduce_479, 1, 318, :_reduce_480, 2, 318, :_reduce_481, 1, 321, :_reduce_482, 0, 326, :_reduce_483, 3, 321, :_reduce_484, 0, 327, :_reduce_485, 4, 321, :_reduce_486, 1, 325, :_reduce_487, 1, 325, :_reduce_488, 1, 325, :_reduce_489, 1, 325, :_reduce_none, 2, 209, :_reduce_491, 1, 209, :_reduce_492, 1, 328, :_reduce_none, 1, 328, :_reduce_none, 1, 328, :_reduce_none, 1, 328, :_reduce_none, 3, 210, :_reduce_497, 1, 313, :_reduce_none, 2, 313, :_reduce_499, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 212, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 201, :_reduce_none, 1, 202, :_reduce_509, 1, 202, :_reduce_510, 1, 202, :_reduce_511, 1, 202, :_reduce_512, 1, 202, :_reduce_513, 1, 202, :_reduce_514, 1, 202, :_reduce_515, 1, 232, :_reduce_516, 1, 232, :_reduce_517, 1, 168, :_reduce_518, 1, 168, :_reduce_519, 1, 173, :_reduce_520, 1, 173, :_reduce_521, 1, 242, :_reduce_522, 0, 329, :_reduce_523, 4, 242, :_reduce_524, 2, 242, :_reduce_525, 3, 244, :_reduce_526, 2, 244, :_reduce_527, 4, 330, :_reduce_528, 2, 330, :_reduce_529, 2, 330, :_reduce_530, 1, 330, :_reduce_none, 2, 332, :_reduce_532, 0, 332, :_reduce_533, 6, 299, :_reduce_534, 8, 299, :_reduce_535, 4, 299, :_reduce_536, 6, 299, :_reduce_537, 4, 299, :_reduce_538, 6, 299, :_reduce_539, 2, 299, :_reduce_540, 4, 299, :_reduce_541, 6, 299, :_reduce_542, 2, 299, :_reduce_543, 4, 299, :_reduce_544, 2, 299, :_reduce_545, 4, 299, :_reduce_546, 1, 299, :_reduce_547, 0, 299, :_reduce_548, 1, 295, :_reduce_549, 1, 295, :_reduce_550, 1, 295, :_reduce_551, 1, 295, :_reduce_552, 1, 278, :_reduce_none, 1, 278, :_reduce_554, 1, 334, :_reduce_none, 1, 335, :_reduce_none, 3, 335, :_reduce_557, 1, 288, :_reduce_558, 3, 288, :_reduce_559, 1, 336, :_reduce_none, 2, 337, :_reduce_561, 1, 337, :_reduce_562, 2, 338, :_reduce_563, 1, 338, :_reduce_564, 1, 282, :_reduce_none, 3, 282, :_reduce_566, 1, 331, :_reduce_none, 3, 331, :_reduce_568, 1, 339, :_reduce_none, 1, 339, :_reduce_none, 2, 283, :_reduce_571, 1, 283, :_reduce_572, 3, 340, :_reduce_573, 3, 341, :_reduce_574, 1, 289, :_reduce_575, 3, 289, :_reduce_576, 1, 333, :_reduce_577, 3, 333, :_reduce_578, 1, 342, :_reduce_none, 1, 342, :_reduce_none, 2, 290, :_reduce_581, 1, 290, :_reduce_582, 1, 343, :_reduce_none, 1, 343, :_reduce_none, 2, 285, :_reduce_585, 2, 284, :_reduce_586, 0, 284, :_reduce_587, 1, 245, :_reduce_none, 0, 344, :_reduce_589, 4, 245, :_reduce_590, 1, 233, :_reduce_591, 2, 233, :_reduce_592, 1, 218, :_reduce_none, 3, 218, :_reduce_594, 3, 345, :_reduce_595, 3, 345, :_reduce_596, 4, 345, :_reduce_597, 2, 345, :_reduce_598, 2, 345, :_reduce_599, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 192, :_reduce_none, 1, 185, :_reduce_none, 1, 185, :_reduce_none, 1, 185, :_reduce_none, 1, 185, :_reduce_none, 1, 303, :_reduce_none, 1, 303, :_reduce_none, 1, 303, :_reduce_none, 1, 184, :_reduce_none, 1, 184, :_reduce_none, 1, 172, :_reduce_none, 0, 150, :_reduce_none, 1, 150, :_reduce_none, 0, 179, :_reduce_none, 1, 179, :_reduce_none, 2, 196, :_reduce_none, 2, 171, :_reduce_none, 0, 217, :_reduce_none, 1, 217, :_reduce_none, 1, 217, :_reduce_none, 1, 243, :_reduce_622, 1, 243, :_reduce_none, 1, 153, :_reduce_none, 2, 153, :_reduce_625, 0, 151, :_reduce_626 ] racc_reduce_n = 627 racc_shift_n = 1058 racc_token_table = { false => 0, :error => 1, :kCLASS => 2, :kMODULE => 3, :kDEF => 4, :kUNDEF => 5, :kBEGIN => 6, :kRESCUE => 7, :kENSURE => 8, :kEND => 9, :kIF => 10, :kUNLESS => 11, :kTHEN => 12, :kELSIF => 13, :kELSE => 14, :kCASE => 15, :kWHEN => 16, :kWHILE => 17, :kUNTIL => 18, :kFOR => 19, :kBREAK => 20, :kNEXT => 21, :kREDO => 22, :kRETRY => 23, :kIN => 24, :kDO => 25, :kDO_COND => 26, :kDO_BLOCK => 27, :kDO_LAMBDA => 28, :kRETURN => 29, :kYIELD => 30, :kSUPER => 31, :kSELF => 32, :kNIL => 33, :kTRUE => 34, :kFALSE => 35, :kAND => 36, :kOR => 37, :kNOT => 38, :kIF_MOD => 39, :kUNLESS_MOD => 40, :kWHILE_MOD => 41, :kUNTIL_MOD => 42, :kRESCUE_MOD => 43, :kALIAS => 44, :kDEFINED => 45, :klBEGIN => 46, :klEND => 47, :k__LINE__ => 48, :k__FILE__ => 49, :k__ENCODING__ => 50, :tIDENTIFIER => 51, :tFID => 52, :tGVAR => 53, :tIVAR => 54, :tCONSTANT => 55, :tLABEL => 56, :tCVAR => 57, :tNTH_REF => 58, :tBACK_REF => 59, :tSTRING_CONTENT => 60, :tINTEGER => 61, :tFLOAT => 62, :tREGEXP_END => 63, :tUPLUS => 64, :tUMINUS => 65, :tUMINUS_NUM => 66, :tPOW => 67, :tCMP => 68, :tEQ => 69, :tEQQ => 70, :tNEQ => 71, :tGEQ => 72, :tLEQ => 73, :tANDOP => 74, :tOROP => 75, :tMATCH => 76, :tNMATCH => 77, :tDOT => 78, :tDOT2 => 79, :tDOT3 => 80, :tAREF => 81, :tASET => 82, :tLSHFT => 83, :tRSHFT => 84, :tCOLON2 => 85, :tCOLON3 => 86, :tOP_ASGN => 87, :tASSOC => 88, :tLPAREN => 89, :tLPAREN2 => 90, :tRPAREN => 91, :tLPAREN_ARG => 92, :tLBRACK => 93, :tLBRACK2 => 94, :tRBRACK => 95, :tLBRACE => 96, :tLBRACE_ARG => 97, :tSTAR => 98, :tSTAR2 => 99, :tAMPER => 100, :tAMPER2 => 101, :tTILDE => 102, :tPERCENT => 103, :tDIVIDE => 104, :tPLUS => 105, :tMINUS => 106, :tLT => 107, :tGT => 108, :tPIPE => 109, :tBANG => 110, :tCARET => 111, :tLCURLY => 112, :tRCURLY => 113, :tBACK_REF2 => 114, :tSYMBEG => 115, :tSTRING_BEG => 116, :tXSTRING_BEG => 117, :tREGEXP_BEG => 118, :tWORDS_BEG => 119, :tQWORDS_BEG => 120, :tSTRING_DBEG => 121, :tSTRING_DVAR => 122, :tSTRING_END => 123, :tSTRING => 124, :tSYMBOL => 125, :tNL => 126, :tEH => 127, :tCOLON => 128, :tCOMMA => 129, :tSPACE => 130, :tSEMI => 131, :tLAMBDA => 132, :tLAMBEG => 133, :tDSTAR => 134, :tCHAR => 135, :tSYMBOLS_BEG => 136, :tQSYMBOLS_BEG => 137, :tSTRING_DEND => 138, :tUBANG => 139, :tRATIONAL => 140, :tIMAGINARY => 141, :tLABEL_END => 142, :tEQL => 143, :tLOWEST => 144 } racc_nt_base = 145 racc_use_result_var = true Racc_arg = [ racc_action_table, racc_action_check, racc_action_default, racc_action_pointer, racc_goto_table, racc_goto_check, racc_goto_default, racc_goto_pointer, racc_nt_base, racc_reduce_table, racc_token_table, racc_shift_n, racc_reduce_n, racc_use_result_var ] Racc_token_to_s_table = [ "$end", "error", "kCLASS", "kMODULE", "kDEF", "kUNDEF", "kBEGIN", "kRESCUE", "kENSURE", "kEND", "kIF", "kUNLESS", "kTHEN", "kELSIF", "kELSE", "kCASE", "kWHEN", "kWHILE", "kUNTIL", "kFOR", "kBREAK", "kNEXT", "kREDO", "kRETRY", "kIN", "kDO", "kDO_COND", "kDO_BLOCK", "kDO_LAMBDA", "kRETURN", "kYIELD", "kSUPER", "kSELF", "kNIL", "kTRUE", "kFALSE", "kAND", "kOR", "kNOT", "kIF_MOD", "kUNLESS_MOD", "kWHILE_MOD", "kUNTIL_MOD", "kRESCUE_MOD", "kALIAS", "kDEFINED", "klBEGIN", "klEND", "k__LINE__", "k__FILE__", "k__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tLABEL", "tCVAR", "tNTH_REF", "tBACK_REF", "tSTRING_CONTENT", "tINTEGER", "tFLOAT", "tREGEXP_END", "tUPLUS", "tUMINUS", "tUMINUS_NUM", "tPOW", "tCMP", "tEQ", "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", "tDOT", "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN2", "tRPAREN", "tLPAREN_ARG", "tLBRACK", "tLBRACK2", "tRBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tSTAR2", "tAMPER", "tAMPER2", "tTILDE", "tPERCENT", "tDIVIDE", "tPLUS", "tMINUS", "tLT", "tGT", "tPIPE", "tBANG", "tCARET", "tLCURLY", "tRCURLY", "tBACK_REF2", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tSTRING", "tSYMBOL", "tNL", "tEH", "tCOLON", "tCOMMA", "tSPACE", "tSEMI", "tLAMBDA", "tLAMBEG", "tDSTAR", "tCHAR", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", "tSTRING_DEND", "tUBANG", "tRATIONAL", "tIMAGINARY", "tLABEL_END", "tEQL", "tLOWEST", "$start", "program", "top_compstmt", "@1", "top_stmts", "opt_terms", "none", "top_stmt", "terms", "stmt", "bodystmt", "@2", "compstmt", "opt_rescue", "opt_else", "opt_ensure", "stmts", "fitem", "undef_list", "expr_value", "command_asgn", "mlhs", "command_call", "var_lhs", "primary_value", "opt_call_args", "rbracket", "call_op", "backref", "lhs", "mrhs", "mrhs_arg", "expr", "@3", "opt_nl", "arg", "command", "block_command", "block_call", "dot_or_colon", "operation2", "command_args", "cmd_brace_block", "opt_block_param", "fcall", "@4", "@5", "operation", "call_args", "mlhs_basic", "mlhs_inner", "rparen", "mlhs_head", "mlhs_item", "mlhs_node", "mlhs_post", "user_variable", "keyword_variable", "cname", "cpath", "fname", "op", "reswords", "fsym", "symbol", "dsym", "@6", "simple_numeric", "primary", "arg_value", "aref_args", "args", "trailer", "assocs", "paren_args", "opt_paren_args", "opt_block_arg", "block_arg", "@7", "literal", "strings", "xstring", "regexp", "words", "qwords", "symbols", "qsymbols", "var_ref", "assoc_list", "brace_block", "method_call", "lambda", "then", "if_tail", "do", "case_body", "for_var", "superclass", "term", "f_arglist", "singleton", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23", "@24", "@25", "@26", "@27", "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "f_marg", "f_norm_arg", "f_margs", "f_marg_list", "block_args_tail", "f_block_kwarg", "f_kwrest", "opt_f_block_arg", "f_block_arg", "opt_block_args_tail", "block_param", "f_arg", "f_block_optarg", "f_rest_arg", "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "f_bad_arg", "f_larglist", "lambda_body", "@28", "f_args", "do_block", "@29", "@30", "operation3", "@31", "@32", "@33", "@34", "@35", "cases", "@36", "exc_list", "exc_var", "numeric", "string", "string1", "string_contents", "xstring_contents", "regexp_contents", "word_list", "word", "string_content", "symbol_list", "qword_list", "qsym_list", "string_dvar", "@37", "@38", "sym", "@39", "args_tail", "f_kwarg", "opt_args_tail", "f_optarg", "f_arg_asgn", "f_arg_item", "f_label", "f_kw", "f_block_kw", "kwrest_mark", "f_opt", "f_block_opt", "restarg_mark", "blkarg_mark", "@40", "assoc" ] Racc_debug_parser = false ##### State transition tables end ##### # reduce 0 omitted def _reduce_1(val, _values, result) self.lexer.lex_state = :expr_beg result end def _reduce_2(val, _values, result) result = new_compstmt val result end def _reduce_3(val, _values, result) result = val[0] result end # reduce 4 omitted # reduce 5 omitted def _reduce_6(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 7 omitted def _reduce_8(val, _values, result) result = val[0] # TODO: remove once I have more confidence this is fixed # result.each_of_type :call_args do |s| # debug20 666, s, result # end result end def _reduce_9(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 1 yyerror "BEGIN in method" end self.env.extend result end def _reduce_10(val, _values, result) result = new_iter s(:preexe), nil, val[3] result end def _reduce_11(val, _values, result) result = new_body val result end def _reduce_12(val, _values, result) result = new_compstmt val result end # reduce 13 omitted # reduce 14 omitted def _reduce_15(val, _values, result) result = self.block_append val[0], val[2] result end def _reduce_16(val, _values, result) result = val[1] debug20 2, val, result result end def _reduce_17(val, _values, result) lexer.lex_state = :expr_fname result = self.lexer.lineno result end def _reduce_18(val, _values, result) result = s(:alias, val[1], val[3]).line(val[2]) result end def _reduce_19(val, _values, result) result = s(:valias, val[1].to_sym, val[2].to_sym) result end def _reduce_20(val, _values, result) result = s(:valias, val[1].to_sym, :"$#{val[2]}") result end def _reduce_21(val, _values, result) yyerror "can't make alias for the number variables" result end def _reduce_22(val, _values, result) result = val[1] result end def _reduce_23(val, _values, result) result = new_if val[2], val[0], nil result end def _reduce_24(val, _values, result) result = new_if val[2], nil, val[0] result end def _reduce_25(val, _values, result) result = new_while val[0], val[2], true result end def _reduce_26(val, _values, result) result = new_until val[0], val[2], true result end def _reduce_27(val, _values, result) result = s(:rescue, val[0], new_resbody(s(:array), val[2])) result end def _reduce_28(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 3 yyerror "END in method; use at_exit" end result = new_iter s(:postexe), 0, val[2] result end # reduce 29 omitted def _reduce_30(val, _values, result) result = new_masgn val[0], val[2], :wrap result end def _reduce_31(val, _values, result) result = new_op_asgn val result end def _reduce_32(val, _values, result) result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_33(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line result end def _reduce_34(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) if val[1] == '&.' result.sexp_type = :safe_op_asgn end result.line = val[0].line result end def _reduce_35(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 4, val, result result end def _reduce_36(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2], val[3]) debug20 5, val, result result end def _reduce_37(val, _values, result) self.backref_assign_error val[0] result end def _reduce_38(val, _values, result) result = new_assign val[0], s(:svalue, val[2]) result end def _reduce_39(val, _values, result) result = new_masgn val[0], val[2] result end # reduce 40 omitted def _reduce_41(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_42(val, _values, result) result = new_assign val[0], val[2] result end # reduce 43 omitted def _reduce_44(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_45(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_46(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_47(val, _values, result) result = s(:call, val[1], :"!") result end # reduce 48 omitted def _reduce_49(val, _values, result) result = value_expr(val[0]) result end # reduce 50 omitted # reduce 51 omitted # reduce 52 omitted def _reduce_53(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_54(val, _values, result) self.env.extend(:dynamic) result = self.lexer.lineno result end def _reduce_55(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_56(val, _values, result) result = new_iter nil, val[2], val[4] result.line = val[1] self.env.unextend result end def _reduce_57(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_58(val, _values, result) result = val[0].concat val[1].sexp_body # REFACTOR pattern result end def _reduce_59(val, _values, result) result = val[0].concat val[1].sexp_body if val[2] then block_dup_check result, val[2] result, operation = val[2], result result.insert 1, operation end result end def _reduce_60(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_61(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args, val[1] block_dup_check call, block block.insert 1, call result = block result end def _reduce_62(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_63(val, _values, result) recv, _, msg, args, block = val call = new_call recv, msg.to_sym, args block_dup_check call, block block.insert 1, call result = block result end def _reduce_64(val, _values, result) result = new_super val[1] result end def _reduce_65(val, _values, result) result = new_yield val[1] result end def _reduce_66(val, _values, result) line = val[0].last result = s(:return, ret_args(val[1])).line(line) result end def _reduce_67(val, _values, result) line = val[0].last result = s(:break, ret_args(val[1])).line(line) result end def _reduce_68(val, _values, result) line = val[0].last result = s(:next, ret_args(val[1])).line(line) result end # reduce 69 omitted def _reduce_70(val, _values, result) result = val[1] result end # reduce 71 omitted def _reduce_72(val, _values, result) result = s(:masgn, s(:array, val[1])) result end def _reduce_73(val, _values, result) result = s(:masgn, val[0]) result end def _reduce_74(val, _values, result) result = s(:masgn, val[0] << val[1].compact) result end def _reduce_75(val, _values, result) result = s(:masgn, val[0] << s(:splat, val[2])) result end def _reduce_76(val, _values, result) ary1, _, splat, _, ary2 = val result = list_append ary1, s(:splat, splat) result.concat ary2.sexp_body result = s(:masgn, result) result end def _reduce_77(val, _values, result) result = s(:masgn, val[0] << s(:splat)) result end def _reduce_78(val, _values, result) ary = list_append val[0], s(:splat) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_79(val, _values, result) result = s(:masgn, s(:array, s(:splat, val[1]))) result end def _reduce_80(val, _values, result) ary = s(:array, s(:splat, val[1])) ary.concat val[3].sexp_body result = s(:masgn, ary) result end def _reduce_81(val, _values, result) result = s(:masgn, s(:array, s(:splat))) result end def _reduce_82(val, _values, result) result = s(:masgn, s(:array, s(:splat), *val[2].sexp_body)) result end # reduce 83 omitted def _reduce_84(val, _values, result) result = val[1] result end def _reduce_85(val, _values, result) result = s(:array, val[0]) result end def _reduce_86(val, _values, result) result = val[0] << val[1].compact result end def _reduce_87(val, _values, result) result = s(:array, val[0]) result end def _reduce_88(val, _values, result) result = list_append val[0], val[2] result end def _reduce_89(val, _values, result) result = self.assignable val[0] result end def _reduce_90(val, _values, result) result = self.assignable val[0] result end def _reduce_91(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_92(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_93(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_94(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_95(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 7 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym), nil) result end def _reduce_96(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 8 yyerror "dynamic constant assignment" end result = s(:const, nil, s(:colon3, val[1].to_sym)) result end def _reduce_97(val, _values, result) self.backref_assign_error val[0] result end def _reduce_98(val, _values, result) result = self.assignable val[0] result end def _reduce_99(val, _values, result) result = self.assignable val[0] debug20 9, val, result result end def _reduce_100(val, _values, result) result = self.aryset val[0], val[2] result end def _reduce_101(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_102(val, _values, result) result = s(:attrasgn, val[0], :"#{val[2]}=") result end def _reduce_103(val, _values, result) result = new_attrasgn val[0], val[2], val[1] result end def _reduce_104(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 10 yyerror "dynamic constant assignment" end result = s(:const, s(:colon2, val[0], val[2].to_sym)) result end def _reduce_105(val, _values, result) if (self.in_def || self.in_single > 0) then debug20 11 yyerror "dynamic constant assignment" end result = s(:const, s(:colon3, val[1].to_sym)) result end def _reduce_106(val, _values, result) self.backref_assign_error val[0] result end def _reduce_107(val, _values, result) yyerror "class/module name must be CONSTANT" result end # reduce 108 omitted def _reduce_109(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_110(val, _values, result) result = val[0].to_sym result end def _reduce_111(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end # reduce 112 omitted # reduce 113 omitted # reduce 114 omitted def _reduce_115(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end def _reduce_116(val, _values, result) lexer.lex_state = :expr_end result = val[0] result end # reduce 117 omitted # reduce 118 omitted def _reduce_119(val, _values, result) result = s(:lit, val[0].to_sym) result end # reduce 120 omitted def _reduce_121(val, _values, result) result = new_undef val[0] result end def _reduce_122(val, _values, result) lexer.lex_state = :expr_fname result end def _reduce_123(val, _values, result) result = new_undef val[0], val[3] result end # reduce 124 omitted # reduce 125 omitted # reduce 126 omitted # reduce 127 omitted # reduce 128 omitted # reduce 129 omitted # reduce 130 omitted # reduce 131 omitted # reduce 132 omitted # reduce 133 omitted # reduce 134 omitted # reduce 135 omitted # reduce 136 omitted # reduce 137 omitted # reduce 138 omitted # reduce 139 omitted # reduce 140 omitted # reduce 141 omitted # reduce 142 omitted # reduce 143 omitted # reduce 144 omitted # reduce 145 omitted # reduce 146 omitted # reduce 147 omitted # reduce 148 omitted # reduce 149 omitted # reduce 150 omitted # reduce 151 omitted # reduce 152 omitted # reduce 153 omitted # reduce 154 omitted # reduce 155 omitted # reduce 156 omitted # reduce 157 omitted # reduce 158 omitted # reduce 159 omitted # reduce 160 omitted # reduce 161 omitted # reduce 162 omitted # reduce 163 omitted # reduce 164 omitted # reduce 165 omitted # reduce 166 omitted # reduce 167 omitted # reduce 168 omitted # reduce 169 omitted # reduce 170 omitted # reduce 171 omitted # reduce 172 omitted # reduce 173 omitted # reduce 174 omitted # reduce 175 omitted # reduce 176 omitted # reduce 177 omitted # reduce 178 omitted # reduce 179 omitted # reduce 180 omitted # reduce 181 omitted # reduce 182 omitted # reduce 183 omitted # reduce 184 omitted # reduce 185 omitted # reduce 186 omitted # reduce 187 omitted # reduce 188 omitted # reduce 189 omitted # reduce 190 omitted # reduce 191 omitted # reduce 192 omitted # reduce 193 omitted # reduce 194 omitted def _reduce_195(val, _values, result) result = new_assign val[0], val[2] result end def _reduce_196(val, _values, result) result = new_assign val[0], s(:rescue, val[2], new_resbody(s(:array), val[4])) result end def _reduce_197(val, _values, result) result = new_op_asgn val result end def _reduce_198(val, _values, result) result = new_op_asgn val result = s(:rescue, result, new_resbody(s(:array), val[4])) result end def _reduce_199(val, _values, result) val[2].sexp_type = :arglist if val[2] result = s(:op_asgn1, val[0], val[2], val[4].to_sym, val[5]) result end def _reduce_200(val, _values, result) result = new_op_asgn2 val result end def _reduce_201(val, _values, result) result = new_op_asgn2 val result end def _reduce_202(val, _values, result) result = s(:op_asgn, val[0], val[4], val[2].to_sym, val[3].to_sym) result end def _reduce_203(val, _values, result) yyerror "constant re-assignment" result end def _reduce_204(val, _values, result) yyerror "constant re-assignment" result end def _reduce_205(val, _values, result) self.backref_assign_error val[0] result end def _reduce_206(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)..(v2.last)) else result = s(:dot2, v1, v2) end result end def _reduce_207(val, _values, result) v1, v2 = val[0], val[2] if v1.node_type == :lit and v2.node_type == :lit and Integer === v1.last and Integer === v2.last then result = s(:lit, (v1.last)...(v2.last)) else result = s(:dot3, v1, v2) end result end def _reduce_208(val, _values, result) result = new_call val[0], :+, argl(val[2]) result end def _reduce_209(val, _values, result) result = new_call val[0], :-, argl(val[2]) result end def _reduce_210(val, _values, result) result = new_call val[0], :*, argl(val[2]) result end def _reduce_211(val, _values, result) result = new_call val[0], :"/", argl(val[2]) result end def _reduce_212(val, _values, result) result = new_call val[0], :"%", argl(val[2]) result end def _reduce_213(val, _values, result) result = new_call val[0], :**, argl(val[2]) result end def _reduce_214(val, _values, result) result = new_call(new_call(s(:lit, val[1]), :"**", argl(val[3])), :"-@") result end def _reduce_215(val, _values, result) result = new_call val[1], :"+@" result end def _reduce_216(val, _values, result) result = new_call val[1], :"-@" result end def _reduce_217(val, _values, result) result = new_call val[0], :"|", argl(val[2]) result end def _reduce_218(val, _values, result) result = new_call val[0], :"^", argl(val[2]) result end def _reduce_219(val, _values, result) result = new_call val[0], :"&", argl(val[2]) result end def _reduce_220(val, _values, result) result = new_call val[0], :"<=>", argl(val[2]) result end def _reduce_221(val, _values, result) result = new_call val[0], :">", argl(val[2]) result end def _reduce_222(val, _values, result) result = new_call val[0], :">=", argl(val[2]) result end def _reduce_223(val, _values, result) result = new_call val[0], :"<", argl(val[2]) result end def _reduce_224(val, _values, result) result = new_call val[0], :"<=", argl(val[2]) result end def _reduce_225(val, _values, result) result = new_call val[0], :"==", argl(val[2]) result end def _reduce_226(val, _values, result) result = new_call val[0], :"===", argl(val[2]) result end def _reduce_227(val, _values, result) result = new_call val[0], :"!=", argl(val[2]) result end def _reduce_228(val, _values, result) result = new_match val[0], val[2] result end def _reduce_229(val, _values, result) result = s(:not, new_match(val[0], val[2])) result end def _reduce_230(val, _values, result) result = new_call val[1], :"!" result end def _reduce_231(val, _values, result) result = new_call value_expr(val[1]), :"~" result end def _reduce_232(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :"\<\<", argl(val[2]) result end def _reduce_233(val, _values, result) val[0] = value_expr val[0] val[2] = value_expr val[2] result = new_call val[0], :">>", argl(val[2]) result end def _reduce_234(val, _values, result) result = logical_op :and, val[0], val[2] result end def _reduce_235(val, _values, result) result = logical_op :or, val[0], val[2] result end def _reduce_236(val, _values, result) result = s(:defined, val[2]) result end def _reduce_237(val, _values, result) result = s(:if, val[0], val[2], val[5]) result end # reduce 238 omitted def _reduce_239(val, _values, result) result = value_expr(val[0]) result end # reduce 240 omitted def _reduce_241(val, _values, result) result = args [val[0]] result end def _reduce_242(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_243(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_244(val, _values, result) result = val[1] result end # reduce 245 omitted # reduce 246 omitted def _reduce_247(val, _values, result) result = val[0] result end def _reduce_248(val, _values, result) result = val[0] result end def _reduce_249(val, _values, result) result = args val result end def _reduce_250(val, _values, result) result = args [val[0], array_to_hash(val[2])] result end def _reduce_251(val, _values, result) result = args [array_to_hash(val[0])] result end def _reduce_252(val, _values, result) warning "parenthesize argument(s) for future version" result = call_args val result end def _reduce_253(val, _values, result) result = call_args val result = self.arg_blk_pass val[0], val[1] result end def _reduce_254(val, _values, result) result = call_args [array_to_hash(val[0])] result = self.arg_blk_pass result, val[1] result end def _reduce_255(val, _values, result) result = call_args [val[0], array_to_hash(val[2])] result = self.arg_blk_pass result, val[3] result end def _reduce_256(val, _values, result) result = call_args val result end def _reduce_257(val, _values, result) result = lexer.cmdarg.stack.dup # TODO: smell? lexer.cmdarg.push true result end def _reduce_258(val, _values, result) lexer.cmdarg.stack.replace val[0] result = val[1] result end def _reduce_259(val, _values, result) result = s(:block_pass, val[1]) result end def _reduce_260(val, _values, result) result = val[1] result end # reduce 261 omitted def _reduce_262(val, _values, result) result = s(:array, val[0]) result end def _reduce_263(val, _values, result) result = s(:array, s(:splat, val[1])) result end def _reduce_264(val, _values, result) result = self.list_append val[0], val[2] result end def _reduce_265(val, _values, result) result = self.list_append val[0], s(:splat, val[3]) result end def _reduce_266(val, _values, result) result = new_masgn_arg val[0] result end def _reduce_267(val, _values, result) result = new_masgn_arg val[0], :wrap result end def _reduce_268(val, _values, result) result = val[0] << val[2] result end def _reduce_269(val, _values, result) result = self.arg_concat val[0], val[3] result end def _reduce_270(val, _values, result) result = s(:splat, val[1]) result end # reduce 271 omitted # reduce 272 omitted # reduce 273 omitted # reduce 274 omitted # reduce 275 omitted # reduce 276 omitted # reduce 277 omitted # reduce 278 omitted # reduce 279 omitted # reduce 280 omitted def _reduce_281(val, _values, result) result = new_call nil, val[0].to_sym result end def _reduce_282(val, _values, result) result = self.lexer.lineno result end def _reduce_283(val, _values, result) unless val[2] then result = s(:nil) else result = s(:begin, val[2]) end result.line = val[1] result end def _reduce_284(val, _values, result) debug20 13, val, result result end def _reduce_285(val, _values, result) result = self.lexer.cmdarg.stack.dup lexer.cmdarg.stack.replace [false] # TODO add api for these result end def _reduce_286(val, _values, result) lexer.lex_state = :expr_endarg result end def _reduce_287(val, _values, result) warning "(...) interpreted as grouped expression" lexer.cmdarg.stack.replace val[1] result = val[2] result end def _reduce_288(val, _values, result) result = val[1] || s(:nil) result.paren = true result end def _reduce_289(val, _values, result) result = s(:colon2, val[0], val[2].to_sym) result end def _reduce_290(val, _values, result) result = s(:colon3, val[1].to_sym) result end def _reduce_291(val, _values, result) result = val[1] || s(:array) result.sexp_type = :array # aref_args is :args result end def _reduce_292(val, _values, result) result = self.lexer.lineno result end def _reduce_293(val, _values, result) result = new_hash val result end def _reduce_294(val, _values, result) result = s(:return) result end def _reduce_295(val, _values, result) result = new_yield val[2] result end def _reduce_296(val, _values, result) result = new_yield result end def _reduce_297(val, _values, result) result = new_yield result end def _reduce_298(val, _values, result) result = s(:defined, val[3]) result end def _reduce_299(val, _values, result) result = s(:call, val[2], :"!") result end def _reduce_300(val, _values, result) debug20 14, val, result result end def _reduce_301(val, _values, result) oper, iter = val[0], val[1] call = oper # FIX iter.insert 1, call result = iter call.line = iter.line result end # reduce 302 omitted def _reduce_303(val, _values, result) call, iter = val[0], val[1] block_dup_check call, iter iter.insert 1, call # FIX result = iter result end def _reduce_304(val, _values, result) result = val[1] # TODO: fix lineno result end def _reduce_305(val, _values, result) result = new_if val[1], val[3], val[4] result end def _reduce_306(val, _values, result) result = new_if val[1], val[4], val[3] result end def _reduce_307(val, _values, result) lexer.cond.push true result end def _reduce_308(val, _values, result) lexer.cond.pop result end def _reduce_309(val, _values, result) result = new_while val[5], val[2], true result end def _reduce_310(val, _values, result) lexer.cond.push true result end def _reduce_311(val, _values, result) lexer.cond.pop result end def _reduce_312(val, _values, result) result = new_until val[5], val[2], true result end def _reduce_313(val, _values, result) (_, line), expr, _, body, _ = val result = new_case expr, body, line result end def _reduce_314(val, _values, result) (_, line), _, body, _ = val result = new_case nil, body, line result end def _reduce_315(val, _values, result) lexer.cond.push true result end def _reduce_316(val, _values, result) lexer.cond.pop result end def _reduce_317(val, _values, result) result = new_for val[4], val[1], val[7] result end def _reduce_318(val, _values, result) result = self.lexer.lineno result end def _reduce_319(val, _values, result) self.comments.push self.lexer.comments if (self.in_def || self.in_single > 0) then yyerror "class definition in method body" end self.env.extend result end def _reduce_320(val, _values, result) result = new_class val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_321(val, _values, result) result = self.lexer.lineno result end def _reduce_322(val, _values, result) result = self.in_def self.in_def = false result end def _reduce_323(val, _values, result) result = self.in_single self.in_single = 0 self.env.extend result end def _reduce_324(val, _values, result) result = new_sclass val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_325(val, _values, result) result = self.lexer.lineno result end def _reduce_326(val, _values, result) self.comments.push self.lexer.comments yyerror "module definition in method body" if self.in_def or self.in_single > 0 self.env.extend result end def _reduce_327(val, _values, result) result = new_module val self.env.unextend self.lexer.comments # we don't care about comments in the body result end def _reduce_328(val, _values, result) result = [self.in_def, self.lexer.cmdarg.stack.dup] self.comments.push self.lexer.comments self.in_def = true self.env.extend # TODO: local->cmdargs = cmdarg_stack; # TODO: port local_push_gen and local_pop_gen lexer.cmdarg.stack.replace [false] result end def _reduce_329(val, _values, result) in_def, cmdarg = val[2] result = new_defn val lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_def = in_def self.lexer.comments # we don't care about comments in the body result end def _reduce_330(val, _values, result) self.comments.push self.lexer.comments lexer.lex_state = :expr_fname result end def _reduce_331(val, _values, result) self.in_single += 1 self.env.extend lexer.lex_state = :expr_endfn # force for args result = [lexer.lineno, self.lexer.cmdarg.stack.dup] lexer.cmdarg.stack.replace [false] result end def _reduce_332(val, _values, result) line, cmdarg = val[5] result = new_defs val result[3].line line lexer.cmdarg.stack.replace cmdarg self.env.unextend self.in_single -= 1 self.lexer.comments # we don't care about comments in the body result end def _reduce_333(val, _values, result) result = s(:break) result end def _reduce_334(val, _values, result) result = s(:next) result end def _reduce_335(val, _values, result) result = s(:redo) result end def _reduce_336(val, _values, result) result = s(:retry) result end def _reduce_337(val, _values, result) result = value_expr(val[0]) result end # reduce 338 omitted # reduce 339 omitted # reduce 340 omitted # reduce 341 omitted # reduce 342 omitted # reduce 343 omitted # reduce 344 omitted # reduce 345 omitted # reduce 346 omitted # reduce 347 omitted # reduce 348 omitted # reduce 349 omitted # reduce 350 omitted # reduce 351 omitted # reduce 352 omitted # reduce 353 omitted # reduce 354 omitted def _reduce_355(val, _values, result) result = s(:if, val[1], val[3], val[4]) result end # reduce 356 omitted def _reduce_357(val, _values, result) result = val[1] result end # reduce 358 omitted def _reduce_359(val, _values, result) val[0].delete_at 1 if val[0][1].nil? # HACK result end # reduce 360 omitted def _reduce_361(val, _values, result) result = val[1] result end def _reduce_362(val, _values, result) result = s(:array, val[0]) result end def _reduce_363(val, _values, result) result = list_append val[0], val[2] result end def _reduce_364(val, _values, result) args, = val result = block_var args result end def _reduce_365(val, _values, result) args, _, _, splat = val result = block_var args, "*#{splat}".to_sym result end def _reduce_366(val, _values, result) args, _, _, splat, _, args2 = val result = block_var args, "*#{splat}".to_sym, args2 result end def _reduce_367(val, _values, result) args, _, _ = val result = block_var args, :* result end def _reduce_368(val, _values, result) args, _, _, _, args2 = val result = block_var args, :*, args2 result end def _reduce_369(val, _values, result) _, splat = val result = block_var :"*#{splat}" result end def _reduce_370(val, _values, result) _, splat, _, args = val result = block_var :"*#{splat}", args result end def _reduce_371(val, _values, result) result = block_var :* result end def _reduce_372(val, _values, result) _, _, args = val result = block_var :*, args result end def _reduce_373(val, _values, result) result = call_args val result end def _reduce_374(val, _values, result) result = call_args val result end def _reduce_375(val, _values, result) result = call_args val result end def _reduce_376(val, _values, result) result = call_args val result end def _reduce_377(val, _values, result) result = args val result end # reduce 378 omitted def _reduce_379(val, _values, result) result = args val result end def _reduce_380(val, _values, result) result = args val result end def _reduce_381(val, _values, result) result = args val result end def _reduce_382(val, _values, result) result = args val result end def _reduce_383(val, _values, result) result = args val result end def _reduce_384(val, _values, result) result = args val result end def _reduce_385(val, _values, result) result = args val result end def _reduce_386(val, _values, result) result = args val result end def _reduce_387(val, _values, result) result = args val result end def _reduce_388(val, _values, result) result = args val result end def _reduce_389(val, _values, result) result = args val result end def _reduce_390(val, _values, result) result = args val result end def _reduce_391(val, _values, result) result = args val result end def _reduce_392(val, _values, result) result = args val result end def _reduce_393(val, _values, result) result = args val result end def _reduce_394(val, _values, result) result = 0 result end # reduce 395 omitted def _reduce_396(val, _values, result) result = args val result end def _reduce_397(val, _values, result) self.lexer.command_start = true result = s(:args) result end def _reduce_398(val, _values, result) result = args val result end # reduce 399 omitted def _reduce_400(val, _values, result) result = args val result end def _reduce_401(val, _values, result) result = args val result end def _reduce_402(val, _values, result) result = args val result end def _reduce_403(val, _values, result) result = s(:shadow, val[0].to_sym) result end # reduce 404 omitted def _reduce_405(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result = lexer.lpar_beg lexer.paren_nest += 1 lexer.lpar_beg = lexer.paren_nest result end def _reduce_406(val, _values, result) lpar, args, body = val lexer.lpar_beg = lpar call = new_call nil, :lambda result = new_iter call, args, body self.env.unextend result end def _reduce_407(val, _values, result) result = args val result end def _reduce_408(val, _values, result) result = val[0] result = 0 if result == s(:args) result end def _reduce_409(val, _values, result) result = val[1] result end def _reduce_410(val, _values, result) result = val[1] result end def _reduce_411(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_412(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_413(val, _values, result) args = val[2] body = val[4] result = new_iter nil, args, body result.line = val[1] self.env.unextend result end def _reduce_414(val, _values, result) # TODO: ## if (nd_type($1) == NODE_YIELD) { ## compile_error(PARSER_ARG "block given to yield"); syntax_error "Both block arg and actual block given." if val[0].block_pass? val = invert_block_call val if inverted? val result = val[1] result.insert 1, val[0] result end def _reduce_415(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_416(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 result end def _reduce_417(val, _values, result) iter1, _, name, args, iter2 = val call = new_call iter1, name.to_sym, args iter2.insert 1, call result = iter2 result end def _reduce_418(val, _values, result) result = self.lexer.lineno result end def _reduce_419(val, _values, result) args = self.call_args val[2..-1] result = val[0].concat args.sexp_body result end def _reduce_420(val, _values, result) result = new_call val[0], val[2].to_sym, val[3], val[1] result end def _reduce_421(val, _values, result) result = new_call val[0], val[2].to_sym, val[3] result end def _reduce_422(val, _values, result) result = new_call val[0], val[2].to_sym result end def _reduce_423(val, _values, result) result = new_call val[0], :call, val[2], val[1] result end def _reduce_424(val, _values, result) result = new_call val[0], :call, val[2] result end def _reduce_425(val, _values, result) result = new_super val[1] result end def _reduce_426(val, _values, result) result = s(:zsuper) result end def _reduce_427(val, _values, result) result = new_aref val result end def _reduce_428(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_429(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_430(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_431(val, _values, result) self.env.extend :dynamic result = self.lexer.lineno result end def _reduce_432(val, _values, result) result = nil # self.env.dynamic.keys result end def _reduce_433(val, _values, result) _, line, args, _, body, _ = val result = new_iter nil, args, body result.line = line self.env.unextend result end def _reduce_434(val, _values, result) result = self.lexer.lineno result end def _reduce_435(val, _values, result) result = new_when(val[2], val[4]) result.line = val[1] result << val[5] if val[5] result end # reduce 436 omitted # reduce 437 omitted def _reduce_438(val, _values, result) (_, line), klasses, var, _, body, rest = val klasses ||= s(:array) klasses << new_assign(var, s(:gvar, :"$!")) if var klasses.line line result = new_resbody(klasses, body) result << rest if rest # UGH, rewritten above result end def _reduce_439(val, _values, result) result = nil result end def _reduce_440(val, _values, result) result = s(:array, val[0]) result end # reduce 441 omitted # reduce 442 omitted def _reduce_443(val, _values, result) result = val[1] result end # reduce 444 omitted def _reduce_445(val, _values, result) _, body = val result = body || s(:nil) result end # reduce 446 omitted def _reduce_447(val, _values, result) result = s(:lit, val[0]) result end def _reduce_448(val, _values, result) result = s(:lit, val[0]) result end # reduce 449 omitted def _reduce_450(val, _values, result) val[0] = s(:dstr, val[0].value) if val[0].sexp_type == :evstr result = val[0] result end def _reduce_451(val, _values, result) debug20 23, val, result result end # reduce 452 omitted def _reduce_453(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_454(val, _values, result) result = val[1] result end def _reduce_455(val, _values, result) result = new_string val result end def _reduce_456(val, _values, result) result = new_xstring val[1] result end def _reduce_457(val, _values, result) result = new_regexp val result end def _reduce_458(val, _values, result) result = s(:array) result end def _reduce_459(val, _values, result) result = val[1] result end def _reduce_460(val, _values, result) result = new_word_list result end def _reduce_461(val, _values, result) result = val[0].dup << new_word_list_entry(val) result end # reduce 462 omitted def _reduce_463(val, _values, result) result = self.literal_concat val[0], val[1] result end def _reduce_464(val, _values, result) result = s(:array) result end def _reduce_465(val, _values, result) result = val[1] result end def _reduce_466(val, _values, result) result = new_symbol_list result end def _reduce_467(val, _values, result) result = val[0].dup << new_symbol_list_entry(val) result end def _reduce_468(val, _values, result) result = s(:array) result end def _reduce_469(val, _values, result) result = val[1] result end def _reduce_470(val, _values, result) result = s(:array) result end def _reduce_471(val, _values, result) result = val[1] result end def _reduce_472(val, _values, result) result = new_qword_list result end def _reduce_473(val, _values, result) result = val[0].dup << new_qword_list_entry(val) result end def _reduce_474(val, _values, result) result = new_qsym_list result end def _reduce_475(val, _values, result) result = val[0].dup << new_qsym_list_entry(val) result end def _reduce_476(val, _values, result) result = s(:str, "") result end def _reduce_477(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_478(val, _values, result) result = nil result end def _reduce_479(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_480(val, _values, result) result = nil result end def _reduce_481(val, _values, result) result = literal_concat(val[0], val[1]) result end def _reduce_482(val, _values, result) result = new_string val result end def _reduce_483(val, _values, result) result = lexer.lex_strterm lexer.lex_strterm = nil lexer.lex_state = :expr_beg # TODO: expr_value ? result end def _reduce_484(val, _values, result) lexer.lex_strterm = val[1] result = s(:evstr, val[2]) result end def _reduce_485(val, _values, result) result = [lexer.lex_strterm, lexer.brace_nest, lexer.string_nest, # TODO: remove lexer.cond.store, lexer.cmdarg.store, lexer.lex_state, ] lexer.lex_strterm = nil lexer.brace_nest = 0 lexer.string_nest = 0 lexer.lex_state = :expr_value result end def _reduce_486(val, _values, result) # TODO: tRCURLY -> tSTRING_END _, memo, stmt, _ = val lex_strterm, brace_nest, string_nest, oldcond, oldcmdarg, oldlex_state = memo lexer.lex_strterm = lex_strterm lexer.brace_nest = brace_nest lexer.string_nest = string_nest lexer.cond.restore oldcond lexer.cmdarg.restore oldcmdarg lexer.lex_state = oldlex_state case stmt when Sexp then case stmt.sexp_type when :str, :dstr, :evstr then result = stmt else result = s(:evstr, stmt) end when nil then result = s(:evstr) else debug20 25 raise "unknown string body: #{stmt.inspect}" end result end def _reduce_487(val, _values, result) result = s(:gvar, val[0].to_sym) result end def _reduce_488(val, _values, result) result = s(:ivar, val[0].to_sym) result end def _reduce_489(val, _values, result) result = s(:cvar, val[0].to_sym) result end # reduce 490 omitted def _reduce_491(val, _values, result) lexer.lex_state = :expr_end result = val[1].to_sym result end def _reduce_492(val, _values, result) result = val[0].to_sym result end # reduce 493 omitted # reduce 494 omitted # reduce 495 omitted # reduce 496 omitted def _reduce_497(val, _values, result) lexer.lex_state = :expr_end result = val[1] result ||= s(:str, "") case result.sexp_type when :dstr then result.sexp_type = :dsym when :str then result = s(:lit, result.last.to_sym) when :evstr then result = s(:dsym, "", result) else debug20 26, val, result end result end # reduce 498 omitted def _reduce_499(val, _values, result) result = -val[1] # TODO: pt_testcase result end # reduce 500 omitted # reduce 501 omitted # reduce 502 omitted # reduce 503 omitted # reduce 504 omitted # reduce 505 omitted # reduce 506 omitted # reduce 507 omitted # reduce 508 omitted def _reduce_509(val, _values, result) result = s(:nil) result end def _reduce_510(val, _values, result) result = s(:self) result end def _reduce_511(val, _values, result) result = s(:true) result end def _reduce_512(val, _values, result) result = s(:false) result end def _reduce_513(val, _values, result) result = s(:str, self.file) result end def _reduce_514(val, _values, result) result = s(:lit, lexer.lineno) result end def _reduce_515(val, _values, result) result = if defined? Encoding then s(:colon2, s(:const, :Encoding), :UTF_8) else s(:str, "Unsupported!") end result end def _reduce_516(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_517(val, _values, result) var = val[0] result = Sexp === var ? var : self.gettable(var) result end def _reduce_518(val, _values, result) result = self.assignable val[0] result end def _reduce_519(val, _values, result) result = self.assignable val[0] debug20 29, val, result result end def _reduce_520(val, _values, result) result = s(:nth_ref, val[0]) result end def _reduce_521(val, _values, result) result = s(:back_ref, val[0]) result end def _reduce_522(val, _values, result) result = nil result end def _reduce_523(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_524(val, _values, result) result = val[2] result end def _reduce_525(val, _values, result) yyerrok result = nil debug20 30, val, result result end def _reduce_526(val, _values, result) result = val[1] self.lexer.lex_state = :expr_beg self.lexer.command_start = true # TODO: # $$ = parser->parser_in_kwarg; # parser->parser_in_kwarg = 1; result end def _reduce_527(val, _values, result) # TODO: parser->parser_in_kwarg = $1; result = val[0] self.lexer.lex_state = :expr_beg self.lexer.command_start = true result end def _reduce_528(val, _values, result) result = args val result end def _reduce_529(val, _values, result) result = args val result end def _reduce_530(val, _values, result) result = args val result end # reduce 531 omitted def _reduce_532(val, _values, result) result = val[1] result end def _reduce_533(val, _values, result) result = nil result end def _reduce_534(val, _values, result) result = args val result end def _reduce_535(val, _values, result) result = args val result end def _reduce_536(val, _values, result) result = args val result end def _reduce_537(val, _values, result) result = args val result end def _reduce_538(val, _values, result) result = args val result end def _reduce_539(val, _values, result) result = args val result end def _reduce_540(val, _values, result) result = args val result end def _reduce_541(val, _values, result) result = args val result end def _reduce_542(val, _values, result) result = args val result end def _reduce_543(val, _values, result) result = args val result end def _reduce_544(val, _values, result) result = args val result end def _reduce_545(val, _values, result) result = args val result end def _reduce_546(val, _values, result) result = args val result end def _reduce_547(val, _values, result) result = args val result end def _reduce_548(val, _values, result) result = args val result end def _reduce_549(val, _values, result) yyerror "formal argument cannot be a constant" result end def _reduce_550(val, _values, result) yyerror "formal argument cannot be an instance variable" result end def _reduce_551(val, _values, result) yyerror "formal argument cannot be a global variable" result end def _reduce_552(val, _values, result) yyerror "formal argument cannot be a class variable" result end # reduce 553 omitted def _reduce_554(val, _values, result) identifier = val[0].to_sym self.env[identifier] = :lvar result = identifier result end # reduce 555 omitted # reduce 556 omitted def _reduce_557(val, _values, result) result = val[1] result end def _reduce_558(val, _values, result) case val[0] when Symbol then result = s(:args) result << val[0] when Sexp then result = val[0] else debug20 32 raise "Unknown f_arg type: #{val.inspect}" end result end def _reduce_559(val, _values, result) list, _, item = val if list.sexp_type == :args then result = list else result = s(:args, list) end result << item result end # reduce 560 omitted def _reduce_561(val, _values, result) # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) result end def _reduce_562(val, _values, result) label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) result end def _reduce_563(val, _values, result) # TODO: call_args label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier, val[1])) result end def _reduce_564(val, _values, result) label, _ = val[0] # TODO: fix lineno? identifier = label.to_sym self.env[identifier] = :lvar result = s(:array, s(:kwarg, identifier)) result end # reduce 565 omitted def _reduce_566(val, _values, result) list, _, item = val result = list << item.last result end # reduce 567 omitted def _reduce_568(val, _values, result) result = args val result end # reduce 569 omitted # reduce 570 omitted def _reduce_571(val, _values, result) result = :"**#{val[1]}" result end def _reduce_572(val, _values, result) result = :"**" result end def _reduce_573(val, _values, result) result = self.assignable val[0], val[2] # TODO: detect duplicate names result end def _reduce_574(val, _values, result) result = self.assignable val[0], val[2] result end def _reduce_575(val, _values, result) result = s(:block, val[0]) result end def _reduce_576(val, _values, result) result = val[0] result << val[2] result end def _reduce_577(val, _values, result) result = s(:block, val[0]) result end def _reduce_578(val, _values, result) result = self.block_append val[0], val[2] result end # reduce 579 omitted # reduce 580 omitted def _reduce_581(val, _values, result) # TODO: differs from parse.y - needs tests name = val[1].to_sym self.assignable name result = :"*#{name}" result end def _reduce_582(val, _values, result) name = :"*" self.env[name] = :lvar result = name result end # reduce 583 omitted # reduce 584 omitted def _reduce_585(val, _values, result) identifier = val[1].to_sym self.env[identifier] = :lvar result = "&#{identifier}".to_sym result end def _reduce_586(val, _values, result) result = val[1] result end def _reduce_587(val, _values, result) result = nil result end # reduce 588 omitted def _reduce_589(val, _values, result) lexer.lex_state = :expr_beg result end def _reduce_590(val, _values, result) result = val[2] yyerror "Can't define single method for literals." if result.sexp_type == :lit result end def _reduce_591(val, _values, result) result = s(:array) result end def _reduce_592(val, _values, result) result = val[0] result end # reduce 593 omitted def _reduce_594(val, _values, result) list = val[0].dup more = val[2].sexp_body list.push(*more) unless more.empty? result = list result.sexp_type = :hash result end def _reduce_595(val, _values, result) result = s(:array, val[0], val[2]) result end def _reduce_596(val, _values, result) result = s(:array, s(:lit, val[0][0].to_sym), val.last) result end def _reduce_597(val, _values, result) _, sym, _, value = val sym.sexp_type = :dsym result = s(:array, sym, value) result end def _reduce_598(val, _values, result) raise "not yet: #{val.inspect}" # result = s(:array, s(:lit, val[1].to_sym), val[1]) result end def _reduce_599(val, _values, result) result = s(:array, s(:kwsplat, val[1])) result end # reduce 600 omitted # reduce 601 omitted # reduce 602 omitted # reduce 603 omitted # reduce 604 omitted # reduce 605 omitted # reduce 606 omitted # reduce 607 omitted # reduce 608 omitted # reduce 609 omitted # reduce 610 omitted # reduce 611 omitted # reduce 612 omitted # reduce 613 omitted # reduce 614 omitted # reduce 615 omitted # reduce 616 omitted # reduce 617 omitted # reduce 618 omitted # reduce 619 omitted # reduce 620 omitted # reduce 621 omitted def _reduce_622(val, _values, result) yyerrok result end # reduce 623 omitted # reduce 624 omitted def _reduce_625(val, _values, result) yyerrok result end def _reduce_626(val, _values, result) result = nil; result end def _reduce_none(val, _values, result) val[0] end end # class Ruby22Parser ruby_parser-3.11.0/README.rdoc0000444000004100000410000000720513277753330016003 0ustar www-datawww-data= ruby_parser home :: https://github.com/seattlerb/ruby_parser bugs :: https://github.com/seattlerb/ruby_parser/issues rdoc :: http://docs.seattlerb.org/ruby_parser == DESCRIPTION: ruby_parser (RP) is a ruby parser written in pure ruby (utilizing racc--which does by default use a C extension). RP's output is the same as ParseTree's output: s-expressions using ruby's arrays and base types. As an example: def conditional1 arg1 return 1 if arg1 == 0 return 0 end becomes: s(:defn, :conditional1, s(:args, :arg1), s(:if, s(:call, s(:lvar, :arg1), :==, s(:lit, 0)), s(:return, s(:lit, 1)), nil), s(:return, s(:lit, 0))) Tested against 801,039 files from the latest of all rubygems (as of 2013-05): * 1.8 parser is at 99.9739% accuracy, 3.651 sigma * 1.9 parser is at 99.9940% accuracy, 4.013 sigma * 2.0 parser is at 99.9939% accuracy, 4.008 sigma == FEATURES/PROBLEMS: * Pure ruby, no compiles. * Includes preceding comment data for defn/defs/class/module nodes! * Incredibly simple interface. * Output is 100% equivalent to ParseTree. * Can utilize PT's SexpProcessor and UnifiedRuby for language processing. * Known Issue: Speed is now pretty good, but can always improve: * RP parses a corpus of 3702 files in 125s (avg 108 Kb/s) * MRI+PT parsed the same in 67.38s (avg 200.89 Kb/s) * Known Issue: Code is much better, but still has a long way to go. * Known Issue: Totally awesome. * Known Issue: line number values can be slightly off. Parsing LR sucks. == SYNOPSIS: RubyParser.new.parse "1+1" # => s(:call, s(:lit, 1), :+, s(:lit, 1)) You can also use Ruby19Parser, Ruby18Parser, or RubyParser.for_current_ruby: RubyParser.for_current_ruby.parse "1+1" # => s(:call, s(:lit, 1), :+, s(:lit, 1)) == DEVELOPER NOTES: To add a new version: * New parser should be generated from lib/ruby_parser.yy. * Extend lib/ruby_parser.yy with new class name. * Add new version number to V2 in Rakefile for rule creation. * Require generated parser in lib/ruby_parser.rb. * Add empty TestRubyParserShared##Plus module and TestRubyParserV## to test/test_ruby_parser.rb. * Extend Manifest.txt with generated file names. * Extend sexp_processor's pt_testcase.rb to match version * add_19tests needs to have the version added * VER_RE needs to have the regexp expanded Until all of these are done, you won't have a clean test run. == REQUIREMENTS: * ruby. woot. * sexp_processor for Sexp and SexpProcessor classes, and testing. * racc full package for parser development (compiling .y to .rb). == INSTALL: * sudo gem install ruby_parser == LICENSE: (The MIT License) Copyright (c) Ryan Davis, seattle.rb Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ruby_parser-3.11.0/compare/0000755000004100000410000000000013277753330015621 5ustar www-datawww-dataruby_parser-3.11.0/compare/normalize.rb0000555000004100000410000001057713277753330020161 0ustar www-datawww-data#!/usr/bin/ruby -w good = false rules = Hash.new { |h,k| h[k] = [] } rule = nil order = [] def munge s renames = [ "'='", "tEQL", "'!'", "tBANG", "'%'", "tPERCENT", "'&'", "tAMPER2", "'('", "tLPAREN2", "')'", "tRPAREN", "'*'", "tSTAR2", "'+'", "tPLUS", "','", "tCOMMA", "'-'", "tMINUS", "'.'", "tDOT", "'/'", "tDIVIDE", "';'", "tSEMI", "':'", "tCOLON", "'<'", "tLT", "'>'", "tGT", "'?'", "tEH", "'['", "tLBRACK", "'\\n'", "tNL", "']'", "tRBRACK", "'^'", "tCARET", "'`'", "tBACK_REF2", "'{'", "tLCURLY", "'|'", "tPIPE", "'}'", "tRCURLY", "'~'", "tTILDE", '"["', "tLBRACK", # 2.0 changes? '"<=>"', "tCMP", '"=="', "tEQ", '"==="', "tEQQ", '"!~"', "tNMATCH", '"=~"', "tMATCH", '">="', "tGEQ", '"<="', "tLEQ", '"!="', "tNEQ", '"<<"', "tLSHFT", '">>"', "tRSHFT", '"*"', "tSTAR", '".."', "tDOT2", '"&"', "tAMPER", '"&&"', "tANDOP", '"||"', "tOROP", '"..."', "tDOT3", '"**"', "tPOW", '"unary+"', "tUPLUS", '"unary-"', "tUMINUS", '"[]"', "tAREF", '"[]="', "tASET", '"::"', "tCOLON2", '"{ arg"', "tLBRACE_ARG", '"( arg"', "tLPAREN_ARG", '"("', "tLPAREN", 'rparen', "tRPAREN", '"{"', "tLBRACE", '"=>"', "tASSOC", '"->"', "tLAMBDA", '":: at EXPR_BEG"', "tCOLON3", '"**arg"', "tDSTAR", '","', "tCOMMA", # other 'tLBRACK2', "tLBRACK", # HACK "' '", "tSPACE", # needs to be later to avoid bad hits "/* empty */", "none", /^\s*$/, "none", "keyword_BEGIN", "klBEGIN", "keyword_END", "klEND", /keyword_(\w+)/, proc { "k#{$1.upcase}" }, /\bk_([a-z_]+)/, proc { "k#{$1.upcase}" }, /modifier_(\w+)/, proc { "k#{$1.upcase}_MOD" }, "kVARIABLE", "keyword_variable", # ugh /@(\d+)\s+/, "", ] renames.each_slice(2) do |(a, b)| if Proc === b then s.gsub!(a, &b) else s.gsub!(a, b) end end s.strip end ARGF.each_line do |line| next unless good or line =~ /^-* ?Grammar|\$accept : / case line.strip when /^$/ then when /^(\d+) (\$?\w+): (.*)/ then # yacc rule = $2 order << rule unless rules.has_key? rule rules[rule] << munge($3) when /^(\d+) \s+\| (.*)/ then # yacc rules[rule] << munge($2) when /^(\d+) (@\d+): (.*)/ then # yacc rule = $2 order << rule unless rules.has_key? rule rules[rule] << munge($3) when /^rule (\d+) (@?\w+):(.*)/ then # racc rule = $2 order << rule unless rules.has_key? rule rules[rule] << munge($3) when /\$accept/ then # byacc? good = true when /Grammar/ then # both good = true when /^-+ Symbols/ then # racc break when /^Terminals/ then # yacc break when /^\cL/ then # byacc break else warn "unparsed: #{$.}: #{line.chomp}" end end require 'yaml' order.each do |k| next if k =~ /@/ puts puts "#{k}:" puts rules[k].map { |r| " #{r}" }.join "\n" end ruby_parser-3.11.0/Manifest.txt0000444000004100000410000000131113277753330016474 0ustar www-datawww-data.autotest History.rdoc Manifest.txt README.rdoc Rakefile bin/ruby_parse bin/ruby_parse_extract_error compare/normalize.rb lib/.document lib/rp_extensions.rb lib/rp_stringscanner.rb lib/ruby18_parser.rb lib/ruby18_parser.y lib/ruby19_parser.rb lib/ruby19_parser.y lib/ruby20_parser.rb lib/ruby20_parser.y lib/ruby21_parser.rb lib/ruby21_parser.y lib/ruby22_parser.rb lib/ruby22_parser.y lib/ruby23_parser.rb lib/ruby23_parser.y lib/ruby24_parser.rb lib/ruby24_parser.y lib/ruby25_parser.rb lib/ruby25_parser.y lib/ruby_lexer.rb lib/ruby_lexer.rex lib/ruby_lexer.rex.rb lib/ruby_parser.rb lib/ruby_parser.yy lib/ruby_parser_extras.rb test/test_ruby_lexer.rb test/test_ruby_parser.rb test/test_ruby_parser_extras.rb